約 2,744,716 件
https://w.atwiki.jp/sicpstudygroup/pages/87.html
naga SICPからの変更(gaucheでSICP-schemeを動かす) SICPのeval・applyをEval・Applyとして定義し、gaucheのeval・applyと共存させる。 (define false #f) (define true #t)追加。self-evaluating? に ((boolean? exp) #t) 追加。setup-environment の中を (define-variable! 'true #t initial-env) と (define-variable! 'false #f initial-env) に変更。true/falseは入力できるが出力は#t/#fになる。 (define apply-in-underlying-scheme apply) 追加。 (Error)追加。 driver-loop の中で継続を設定して、メッセージ出力後に driver-loop に戻るようにした。 (exit)追加。 driver-loop の中の継続を使って driver-loop が終了するようにした。 (time)追加。 gauche の time マクロと同じような機能を入れ込んだつもり。 (load)追加。 (inidb)追加。 ルールの確認のため、データベースの初期化をquery-loopからできるようにした。 (Query) SICPのextendをExtendとして定義し、gaucheのextendと共存させる。 (Query) (define user-initial-environment (scheme-report-environment 5)) (Query) Todo 4.64 4.67 4.72 4.73 4.76 4.77 4.78 4.79 Exercise 4.55 ;;; Query input (a) (supervisor ?name (Bitdiddle Ben)) ;;; Query outputs (supervisor (Tweakit Lem E) (Bitdiddle Ben)) (supervisor (Fect Cy D) (Bitdiddle Ben)) (supervisor (Hacker [[Alyssa]] P) (Bitdiddle Ben)) ;;; Query input (b) (job ?name (accounting . ?job)) ;;; Query outputs (job (Cratchet Robert) (accounting scrivener)) (job (Scrooge Eben) (accounting chief accountant)) ;;; Query input (c) (address ?name (Slumerville . ?address)) ;;; Query outputs (address (Aull DeWitt) (Slumerville (Onion Square) 5)) (address (Reasoner Louis) (Slumerville (Pine Tree Road) 80)) (address (Bitdiddle Ben) (Slumerville (Ridge Road) 10)) Exercise 4.56 ;;; Query input (a) (and (supervisor ?name (Bitdiddle Ben)) (address ?name ?address)) ;;; Query outputs (and (supervisor (Tweakit Lem E) (Bitdiddle Ben)) (address (Tweakit Lem E) (Boston (Bay State Road) 22))) (and (supervisor (Fect Cy D) (Bitdiddle Ben)) (address (Fect Cy D) (Cambridge (Ames Street) 3))) (and (supervisor (Hacker Alyssa P) (Bitdiddle Ben)) (address (Hacker Alyssa P) (Cambridge (Mass Ave) 78))) ;;; Query input (b) (and (salary (Bitdiddle Ben) ?Ben) (salary ?name ?amount) (lisp-value ?Ben ?amount)) ;;; Query outputs (and (salary (Bitdiddle Ben) 60000) (salary (Aull DeWitt) 25000) (lisp-value 60000 25000)) (and (salary (Bitdiddle Ben) 60000) (salary (Cratchet Robert) 18000) (lisp-value 60000 18000)) (and (salary (Bitdiddle Ben) 60000) (salary (Reasoner Louis) 30000) (lisp-value 60000 30000)) (and (salary (Bitdiddle Ben) 60000) (salary (Tweakit Lem E) 25000) (lisp-value 60000 25000)) (and (salary (Bitdiddle Ben) 60000) (salary (Fect Cy D) 35000) (lisp-value 60000 35000)) (and (salary (Bitdiddle Ben) 60000) (salary (Hacker Alyssa P) 40000) (lisp-value 60000 40000)) ;;; Query input (c) (and (supervisor ?name ?supervisor) (not (job ?supervisor (computer . ?job)))) ;;; Query outputs (and (supervisor (Aull DeWitt) (Warbucks Oliver)) (not (job (Warbucks Oliver) (computer . ?job)))) (and (supervisor (Cratchet Robert) (Scrooge Eben)) (not (job (Scrooge Eben) (computer . ?job)))) (and (supervisor (Scrooge Eben) (Warbucks Oliver)) (not (job (Warbucks Oliver) (computer . ?job)))) (and (supervisor (Bitdiddle Ben) (Warbucks Oliver)) (not (job (Warbucks Oliver) (computer . ?job)))) Exercise 4.57 (assert! (rule (can-replace ?person-1 ?person-2) (and (job ?person-1 ?job-1) (job ?person-2 ?job-2) (not (same ?person-1 ?person-2)) (or (same ?job-1 ?job-2) (can-do-job-r ?job-1 ?job-2))))) (assert! ; Ben が Louis の代わりができるように (rule (can-do-job-r ?job-1 ?job-2) (or (can-do-job ?job-1 ?job-2) (and (can-do-job ?job-1 ?job-x) (can-do-job-r ?job-x ?job-2))))) ;;;;; a ;;;;; Query input ;;(can-replace ?person (Fect Cy D)) ;;;;; Query outputs ;;(can-replace (Hacker Alyssa P) (Fect Cy D)) ;;(can-replace (Bitdiddle Ben) (Fect Cy D)) ;;;;; b ;;;;; Query input ;;(and (can-replace ?person-1 ?person-2) ;; (salary ?person-1 ?salary-1) ;; (salary ?person-2 ?salary-2) ;; (lisp-value ?salary-1 ?salary-2)) ;;;;; Query outputs ;;(and (can-replace (Fect Cy D) (Hacker Alyssa P)) (salary (Fect Cy D) 35000) (salary (Hacker Alyssa P) 40000) (lisp-value 35000 40000)) ;;(and (can-replace (Aull DeWitt) (Warbucks Oliver)) (salary (Aull DeWitt) 25000) (salary (Warbucks Oliver) 150000) (lisp-value 25000 150000)) ;;;;; Query input Exercise 4.58 (assert! (rule (big-shot ?person) (and (job ?person (?division . ?rest-1)) (or (and (supervisor ?person ?supervisor) (not (job ?supervisor (?division . ?rest-2)))) (not (supervisor ?person ?supervisor)))))) ;;;;; Query input ;;(big-shot ?who) ;;;;; Query outputs ;;(big-shot (Scrooge Eben)) ;;(big-shot (Warbucks Oliver)) ;;(big-shot (Bitdiddle Ben)) ;;;;; Query input Exercise 4.59 ;; a ;;;;; Query input ;;(meeting ?division (Friday . ?time)) ;;;;; Query outputs ;;(meeting administration (Friday 1pm)) ;; b (assert! (rule (meeting-time ?person ?day-and-time) (or (meeting whole-company ?day-and-time) (and (job ?person (?division . ?rest)) (meeting ?division ?day-and-time))))) ;;;;; Query input ;;(meeting-time (Hacker Alyssa P) ?dat) ;;;;; Query outputs ;;(meeting-time (Hacker Alyssa P) (Wednesday 4pm)) ;;(meeting-time (Hacker Alyssa P) (Wednesday 3pm)) ;; c ;;;;; Query input ;;(meeting-time (Hacker Alyssa P) (Wednesday . ?time)) ;;;;; Query outputs ;;(meeting-time (Hacker Alyssa P) (Wednesday 4pm)) ;;(meeting-time (Hacker Alyssa P) (Wednesday 3pm)) Exercise 4.60 ;;; ?person-1 と ?person-2 を文字列比較して ?person-1 のほうが小さければ ;;; 出力する (assert! (rule (lives-near-all ?person-1 ?person-2) (and (address ?person-1 (?town . ?rest-1)) (address ?person-2 (?town . ?rest-2)) (not (same ?person-1 ?person-2)) (lisp-value (lambda (p1 p2) (define (name-in-string l) (if (null? l) "" (string-append (symbol- string (car l)) (name-in-string (cdr l))))) (string ? (name-in-string p1) (name-in-string p2))) ?person-1 ?person-2)))) ;;;;; Query input ;;(lives-near-all ?a ?b) ;;;;; Query outputs ;;(lives-near-all (Aull DeWitt) (Reasoner Louis)) ;;(lives-near-all (Aull DeWitt) (Bitdiddle Ben)) ;;(lives-near-all (Fect Cy D) (Hacker Alyssa P)) ;;(lives-near-all (Bitdiddle Ben) (Reasoner Louis)) Exercise 4.61 (assert! (rule (?x next-to ?y in (?x ?y . ?u)))) (assert! (rule (?x next-to ?y in (?v . ?z)) (?x next-to ?y in ?z))) ;;;;; Query input ;;(?x next-to ?y in (1 (2 3) 4)) ;;;;; Query outputs ;;((2 3) next-to 4 in (1 (2 3) 4)) ;;(1 next-to (2 3) in (1 (2 3) 4)) ;;;;; Query input ;;(?x next-to 1 in (2 1 3 1)) ;;;;; Query outputs ;;(3 next-to 1 in (2 1 3 1)) ;;(2 next-to 1 in (2 1 3 1)) Exercise 4.62 ;; rule の assert 順を変えると (last-pair ?x (3)) は何も表示せずに loop する。 ;; loop の表示を見ると rule にマッチした pattern を一生懸命(?)作っているのが ;; 良く分かる。 ;; rule は後から登録した物が優先的に使われる。 ;; ルールの本体がないルールは、その unifyで得られた frame を結果として返す。 ;; 従って、問い合わせに対し、 ;; 下のルールが 空frame と unify の結果の表示 ;; 上のルールが 空frame と unify の結果を frame-1 として新しい問い合わせをする ;; 下のルールが frame-1 と unify の結果の表示 ;; 上のルールが frame-1 と unify の結果を frame-2 として新しい問い合わせをする ;; : ;; となる。 (assert! (rule (last-pair (?x . ?y) (?z)) (last-pair ?y (?z)))) (assert! (rule (last-pair (?x) (?x)))) ;;;;; Query input ;;(last-pair (3) ?a) ;;;;; Query outputs ;;(last-pair (3) (3)) ;;;;; Query input ;;(last-pair (1 2 3) ?a) ;;;;; Query outputs ;;(last-pair (1 2 3) (3)) ;;;;; Query input ;;(last-pair (2 ?a) (3)) ;;;;; Query outputs ;;(last-pair (2 3) (3)) ;;;;; Query input ;;(last-pair ?a (3)) ;;;;; Query outputs ;;(last-pair (3) (3)) ;;(last-pair (?x-20 3) (3)) ;;(last-pair (?x-20 ?x-22 3) (3)) ;; ... loop .... ;; 一方、この登録順だと、 ;; 下のルールが 空frame と unify の結果を frame-1 として新しい問い合わせをする ;; 下のルールが frame-1 と unify の結果を frame-2 として新しい問い合わせをする ;; : ;; となる。したがって上のような表示がされない。 (assert! (rule (last-pair (?x) (?x)))) (assert! (rule (last-pair (?x . ?y) (?z)) (last-pair ?y (?z)))) ;; ループの原因は ;; 問い合わせの変数 ?a が ;; 2つに分割され (?x . ?y) ;; その1つがまた問い合わせの変数として使われる ?y ;; ところにあり、ループの終了条件がない。最初の問い合わせが変数でなければ、終了する。 Exercise 4.63 ;;; rule 名を son にしたけど、それなりに動作する。 (assert! (son Adam Cain)) (assert! (son Cain Enoch)) (assert! (son Enoch Irad)) (assert! (son Irad Mehujael)) (assert! (son Mehujael Methushael)) (assert! (son Methushael Lamech)) (assert! (wife Lamech Ada)) (assert! (son Ada Jabal)) (assert! (son Ada Jubal)) ; (assert! (rule (grandson ?G ?S) (and (son ?F ?S) (son ?G ?F)))) (assert! (rule (son ?M ?S) (and (wife ?M ?W) (son ?W ?S)))) ;;;;; Query input ;;(grandson Cain ?grandson) ;;;;; Query outputs ;;(grandson Cain Irad) ;;;;; Query input ;;(son Lamech ?son) ;;;;; Query outputs ;;;;; Query input ;;(son Lamech ?son) ;;;;; Query outputs ;;(son Lamech Jubal) ;;(son Lamech Jabal) ;;;;; Query input ;;(grandson Methushael ?grandson) ;;;;; Query outputs ;;(grandson Methushael Jubal) ;;(grandson Methushael Jabal) Exercise 4.64 Exercise 4.65 ;; (Warbucks Oliver) が (wheel ?who) に該当するのは ;; 1 (Cratchet Robert) (Scrooge Eben) (Warbucks Oliver) ;; 2 (Tweakit Lem E) (Bitdiddle Ben) (Warbucks Oliver) ;; 3 (Fect Cy D) (Bitdiddle Ben) (Warbucks Oliver) ;; 4 (Hacker Alyssa P) (Bitdiddle Ben) (Warbucks Oliver) ;; の 4 通りあるため。 ;;;;; Query input ;;(supervisor ?a ?b) ;;;;; Query outputs ;;(supervisor (Aull DeWitt) (Warbucks Oliver)) ;;(supervisor (Cratchet Robert) (Scrooge Eben)) ;;(supervisor (Scrooge Eben) (Warbucks Oliver)) ;;(supervisor (Bitdiddle Ben) (Warbucks Oliver)) ;;(supervisor (Reasoner Louis) (Hacker Alyssa P)) ;;(supervisor (Tweakit Lem E) (Bitdiddle Ben)) ;;(supervisor (Fect Cy D) (Bitdiddle Ben)) ;;(supervisor (Hacker Alyssa P) (Bitdiddle Ben)) Exercise 4.66 ;; (accumlation-function variable query pattern ) (define (acc-var acc-func) (car acc-func)) (define (acc-q-pattern acc-func) (cadr acc-func) (define (acc-sum acc-func frame-stream) (let ((sum 0) (var (acc-var acc-func))) (stream-for-each (lambda (frame) (let ((val (instantiate var frame #f))) (if (and val (number? val)) (set! sum (+ sum val))))) (qeval (acc-q-pattern acc-func) frame-stream)) (singleton-stream (Extend var sum '())))) (put 'sum 'qeval acc-sum) ;; (make-unique variable query pattern ) (define (mkunique-var fil-def) (car fil-def)) (define (mkunique-pattern fil-def) (cadr fil-def)) (define (make-unique fil-def frame-stream) (let ((val-list '()) (var (mkunique-var fil-def))) (stream-flatmap (lambda (frame) (let ((val (instantiate var frame #f))) (if (and val (not (member val val-list))) (begin (set! val-list (cons val val-list)) (singleton-stream (Extend var val '()))) the-empty-stream))) (qeval (mkunique-pattern fil-def) frame-stream)))) (put 'make-unique 'qeval make-unique) ;;;;; Query input ;;(sum ?amount ;; (and (job ?x (computer programmer)) ;; (salary ?x ?amount))) ;;;;; Query outputs ;;(sum 75000 (and (job ?x (computer programmer)) (salary ?x 75000))) ;;;;; Query input ;;(sum ?amount ;; (and (wheel ?who) ;; (salary ?who ?amount))) ;;;;; Query outputs ;;(sum 660000 (and (wheel ?who) (salary ?who 660000))) ;;;;; Query input ;;(make-unique ?who (wheel ?who)) ;;;;; Query outputs ;;(make-unique (Warbucks Oliver) (wheel (Warbucks Oliver))) ;;(make-unique (Bitdiddle Ben) (wheel (Bitdiddle Ben))) ;;;;; Query input ;;(sum ?amount ;; (and (make-unique ?who (wheel ?who)) ;; (salary ?who ?amount))) ;;;;; Query outputs ;;(sum 210000 (and (make-unique ?who (wheel ?who)) (salary ?who 210000))) ;;;;; Query input Exercise 4.67 Exercise 4.68 (assert! (rule (reverse (?x) (?x)))) (assert! (rule (reverse (?x . ?y) ?z) (and (reverse ?y ?w) (append-to-form ?w (?x) ?z)))) ;(assert! ; (rule (reverse (?x) (?x)))) ;;;;; Query input ;;(reverse (1 2 3) ?x) ;;;;; Query outputs ;;(reverse (1 2 3) (3 2 1)) ;;;;; Query input ;;(reverse ?x (1 2 3)) ;;;;; Query outputs ;; ... loop ... Exercise 4.69 ;;; ?relationship の出力に難あり。でも修正方法が??? ;;(assert! (son Adam Cain)) ;;(assert! (son Cain Enoch)) ;;(assert! (son Enoch Irad)) ;;(assert! (son Irad Mehujael)) ;;(assert! (son Mehujael Methushael)) ;;(assert! (son Methushael Lamech)) ;;(assert! (wife Lamech Ada)) ;;(assert! (son Ada Jabal)) ;;(assert! (son Ada Jubal)) ;;; ;;(assert! (rule (grandson ?G ?S) (and (son ?F ?S) (son ?G ?F)))) ;;(assert! (rule (son ?M ?S) (and (wife ?M ?W) (son ?W ?S)))) (assert! (rule ((great . ?rel) ?x ?y) (and (son ?x ?w) (?rel ?w ?y)))) (assert! (rule ((grandson) ?x ?y) (grandson ?x ?y))) ;;;;; Query input ;;((great grandson) ?g ?ggs) ;;;;; Query outputs ;;((great grandson) Mehujael Jubal) ;;((great grandson) Irad Lamech) ;;((great grandson) Mehujael Jabal) ;;((great grandson) Enoch Methushael) ;;((great grandson) Cain Mehujael) ;;((great grandson) Adam Irad) ;;;;; Query input ;;(?relationship Adam Irad) ;;;;; Query outputs ;;((great grandson) Adam Irad) ;;((great great . son) Adam Irad) ;;((great . grandson) Adam Irad) ;;((great great great . same) Adam Irad) ;;;;; Query input ;;(?relationship Adam Jubal) ;;;;; Query outputs ;;((great great great great great grandson) Adam Jubal) ;;((great great great great great great great . same) Adam Jubal) ;;((great great great great great . grandson) Adam Jubal) ;;((great great great great great great . son) Adam Jubal) ;;;;; Query input Exercise 4.70 (define THE-ASSERTION '()) (define (add1 assertion) (let ((old-assertion THE-ASSERTION)) (set! THE-ASSERTION (cons-stream assertion old-assertion)))) (define (add2 assertion) (set! THE-ASSERTION (cons-stream assertion THE-ASSERTION))) (define add #f) ;;; (define (ex4_70) (set! THE-ASSERTION '()) (set! add add1) (add1 'assertion1) (add1 'assertion2) (display "add1 ") (dsp-stream THE-ASSERTION) (newline) (set! THE-ASSERTION '()) (set! add add2) (add 'assertion1) (add 'assertion2) (display "add2 ") (dsp-stream THE-ASSERTION) ) ;;gosh (ex4_70) ;;add1 assertion2 assertion1 ;;add2 assertion2 assertion2 assertion2 assertion2 assertion2 assertion2 assertion2 assertion2 assertion2 assertion2 done ;;; cons-stream は 1番目の引数と、2番目の引数を評価せず promise とした ;;; 物の pair を返す。 ;;; 従って add2 では ;;; THE-ASSERTION → ('assertion2 . THE-ASSERTIONを返す手続き) ;;; となり stream は asserion2 が無限に続く。 ;;; 一方 add1では ;;; THE-ASSERTION → ('assertion2 . old-assertion1を返す手続き) ;;; old-assertion1→ ('assertion1 . old-assertionを返す手続き) ;;; old-assertion → '() ;;; となり assertion の stream が得られる。 Exercise 4.71 (assert! (loop 1 2)) (assert! (loop 1 3)) (assert! (rule (loop ?x ?y) (loop-rule ?x ?y))) (assert! (rule (loop-rule ?x ?y) (loop-rule ?x ?y))) ;;; 4.4.4.6 Stream Operations に ;;; "Stream-append-delayed and interleave-delayed are just like stream-append ;;; and interleave (section 3.5.3), except that they take a delayed argument ;;; (like the integral procedure in section 3.5.4). ;;; This postpones looping in some cases (see exercise 4.71)." ;;; とあるので・・・ ;;; 出力がバッファリングされているようで meadow だと実行中に差はわかりませんが。 ;;gosh (use SICP4) ;;gosh (Query) ;;;;; Query input ;;(load "ex4_71") ;;;;; Query input ;;(loop ?a ?b) ;;;;; Query outputs ;;(loop 1 3) ← ;; ;;Process scheme exited abnormally with code 1 ;;gosh (use SICP4) ;;ex4_71-procedures are installed ;;gosh (Query) ;;;;; Query input ;;(load "ex4_71") ;;;;; Query input ;;(loop ?a ?b) ;; ;;Process scheme exited abnormally with code 1 Exercise 4.72 Exercise 4.73 Exercise 4.74 ;;; a (define (simple-stream-flatmap proc s) (simple-flatten (stream-map proc s))) (define (simple-flatten stream) (stream-map stream-car (stream-filter (lambda (stream) (if (eq? stream the-empty-stream) #f #t)) stream))) ;;; b ;; stream-flatmap と simple-stream-flatmap の差は stream 中の各 stream の ;; interleave を行わないことだが、各 stream が singleton-stream なので、 ;; 生成される stream に差がでない。 Exercise 4.75 (define (uniquely-asserted operands frame-stream) (stream-flatmap (lambda (frame) (let ((ustream (qeval (unique-query operands) (singleton-stream frame)))) (if (and (not (eq? ustream the-empty-stream)) (not (eq? (stream-car ustream) the-empty-stream)) (eq? (stream-cdr ustream) the-empty-stream)) ustream the-empty-stream))) frame-stream)) (define (unique-query operands) (car operands)) ;;;;; Query input ;;(unique (job ?x (computer wizard))) ;;;;; Query outputs ;;(unique (job (Bitdiddle Ben) (computer wizard))) ;;;;; Query input ;;(unique (job ?x (computer programmer))) ;;;;; Query outputs ;;;;; Query input ;;(and (job ?x ?j) (unique (job ?anyone ?j))) ;;;;; Query outputs ;;(and (job (Aull DeWitt) (administration secretary)) (unique (job (Aull DeWitt) (administration secretary)))) ;;(and (job (Cratchet Robert) (accounting scrivener)) (unique (job (Cratchet Robert) (accounting scrivener)))) ;;(and (job (Scrooge Eben) (accounting chief accountant)) (unique (job (Scrooge Eben) (accounting chief accountant)))) ;;(and (job (Warbucks Oliver) (administration big wheel)) (unique (job (Warbucks Oliver) (administration big wheel)))) ;;(and (job (Reasoner Louis) (computer programmer trainee)) (unique (job (Reasoner Louis) (computer programmer trainee)))) ;;(and (job (Tweakit Lem E) (computer technician)) (unique (job (Tweakit Lem E) (computer technician)))) ;;(and (job (Bitdiddle Ben) (computer wizard)) (unique (job (Bitdiddle Ben) (computer wizard)))) ;;;;; Query input ;;(and (job ?supervisor ?x) (unique (supervisor ?y ?supervisor))) ;;;;; Query outputs ;;(and (job (Scrooge Eben) (accounting chief accountant)) (unique (supervisor (Cratchet Robert) (Scrooge Eben)))) ;;(and (job (Hacker Alyssa P) (computer programmer)) (unique (supervisor (Reasoner Louis) (Hacker Alyssa P)))) ;;;;; Query input
https://w.atwiki.jp/sicpstudygroup/pages/85.html
naga Todo 4.50 Exercise 4.35 (define (an-integer-between low high) (require ( = low high)) (amb low (an-integer-between (+ low 1) high))) (define (a-pythagorean-triple-between low high) (let ((i (an-integer-between low high))) (let ((j (an-integer-between i high))) (let ((k (an-integer-between j high))) (require (= (+ (* i i) (* j j)) (* k k))) (display (list i j k)) (newline) (amb))))) ;;;;;Amb-Eval input ;;(a-pythagorean-triple-between 1 20) ;;;;; Starting a new problem ;;(3 4 5) ;;(5 12 13) ;;(6 8 10) ;;(8 15 17) ;;(9 12 15) ;;(12 16 20) ;;;;; There are no more values of ;;(a-pythagorean-triple-between 1 20) Exercise 4.36 ;; amb は search 戦略として depth first search を使用しているため、 ;; 単純に an-integer-between を an-integer-starting-from に置換え ;; たのでは、特定の変数の値が大きくなるだけとなり上手く行かない。 ;; ex3.69 では interleave を使って特定の stream だけが大きくなるの ;; を防いでいた。 (define (a-pythagorean-triple-from low) (let ((k (an-integer-starting-from low))) (let ((j (an-integer-between low k))) (let ((i (an-integer-between low j))) (require (= (+ (* i i) (* j j)) (* k k))) (list i j k))))) ;;(a-pythagorean-triple-from 20) ;;;;; Starting a new problem ;;;;;Amb-Eval value ;;(20 21 29) ;;;;;Amb-Eval input ;;try-again ;;;;;Amb-Eval value ;;(21 28 35) Exercise 4.37 ;; 確認する組合わせの数は n=high-low+1 とすると ;; ex4.35 では n*n*n ;; Ben版 では n*n ;; で Ben は正しいといえる。 ;; sqrt をとった値を整数かどうか判定するのはちょっと危ない気もするが、 ;; 現実的には問題がない? Exercise 4.38 (define (multiple-dwelling) (let ((baker (amb 1 2 3 4 5)) (cooper (amb 1 2 3 4 5)) (fletcher (amb 1 2 3 4 5)) (miller (amb 1 2 3 4 5)) (smith (amb 1 2 3 4 5))) (require (distinct? (list baker cooper fletcher miller smith))) (require (not (= baker 5))) (require (not (= cooper 1))) (require (not (= fletcher 5))) (require (not (= fletcher 1))) (require ( miller cooper)) ; (require (not (= (abs (- smith fletcher)) 1))) (require (not (= (abs (- fletcher cooper)) 1))) (display (list (list baker baker) (list cooper cooper) (list fletcher fletcher) (list miller miller) (list smith smith))) (newline) (amb))) ;;;;;Amb-Eval input ;;(multiple-dwelling) ;;;;; Starting a new problem ;;((baker 1) (cooper 2) (fletcher 4) (miller 3) (smith 5)) ;;((baker 1) (cooper 2) (fletcher 4) (miller 5) (smith 3)) ;;((baker 1) (cooper 4) (fletcher 2) (miller 5) (smith 3)) ;;((baker 3) (cooper 2) (fletcher 4) (miller 5) (smith 1)) ;;((baker 3) (cooper 4) (fletcher 2) (miller 5) (smith 1)) ;;;;; There are no more values of ;;(multiple-dwelling) Exercise 4.39 ;; distinct? の位置を変えて時間を計測。 ;; 「大きな変化はない」という結果になった。 (define (multiple-dwelling) (let ((baker (amb 1 2 3 4 5)) (cooper (amb 1 2 3 4 5)) (fletcher (amb 1 2 3 4 5)) (miller (amb 1 2 3 4 5)) (smith (amb 1 2 3 4 5))) (require ; (a) (distinct? (list baker cooper fletcher miller smith))) (require (not (= baker 5))) (require (not (= cooper 1))) (require (not (= fletcher 5))) (require (not (= fletcher 1))) (require ( miller cooper)) #;(require ; (b) (distinct? (list baker cooper fletcher miller smith))) (require (not (= (abs (- fletcher cooper)) 1))) #;(require ; (c) (distinct? (list baker cooper fletcher miller smith))) (display (list (list baker baker) (list cooper cooper) (list fletcher fletcher) (list miller miller) (list smith smith))) (newline) (amb))) ;;;;; Starting a new problem (a) ;;((baker 1) (cooper 2) (fletcher 4) (miller 3) (smith 5)) ;; ;;# real-time 4.229 ;;# user-time 4.2159999999999975 ;;# system-time 0.0 ;;;;; Starting a new problem (b) ;;((baker 1) (cooper 2) (fletcher 4) (miller 3) (smith 5)) ;; ;;# real-time 4.277 ;;# user-time 4.266 ;;# system-time 0.010000000000000009 ;;;;; Starting a new problem (c) ;;((baker 1) (cooper 2) (fletcher 4) (miller 3) (smith 5)) ;; ;;# real-time 4.254 ;;# user-time 4.246 ;;# system-time 0.0 Exercise 4.40 (define (multiple-dwelling) (let ((cooper (amb 2 3 4)) (miller (amb 3 4 5))) (require ( miller cooper)) (let ((fletcher (amb 2 3 4))) (require (not (= (abs (- fletcher cooper)) 1))) (let ((beker (amb 1 2 3 4)) (smith (amb 1 2 3 4 5))) (require (distinct? (list beker cooper fletcher miller smith))) (display (list (list beker beker) (list cooper cooper) (list fletcher fletcher) (list miller miller) (list smith smith))) (newline) (amb))))) ;;;;; Starting a new problem ;;((beker 1) (cooper 2) (fletcher 4) (miller 3) (smith 5)) ;; ;;# real-time 0.331 ;;# user-time 0.33099999999999996 ;;# system-time 0.0 ;;;;;Amb-Eval value ;;# undef (define (multiple-dwelling2) (let ((cooper (amb 1 2 3 4 5))) (require (not (= cooper 1))) (let ((miller (amb 1 2 3 4 5))) (require ( miller cooper)) (let ((fletcher (amb 1 2 3 4 5))) (require (not (= fletcher 5))) (require (not (= fletcher 1))) (require (not (= (abs (- fletcher cooper)) 1))) (let ((beker (amb 1 2 3 4 5))) (require (not (= beker 5))) (let ((smith (amb 1 2 3 4 5))) (require (distinct? (list beker cooper fletcher miller smith))) (display (list (list beker beker) (list cooper cooper) (list fletcher fletcher) (list miller miller) (list smith smith))) (newline) (amb))))))) ;;# real-time 0.39 ;;# user-time 0.3809999999999998 ;;# system-time 0.0 ;;;;;Amb-Eval value ;;# undef (define (multiple-dwelling3) (let ((cooper (amb 2 3 4)) (miller (amb 3 4 5)) (fletcher (amb 2 3 4)) (beker (amb 1 2 3 4)) (smith (amb 1 2 3 4 5))) (require (distinct? (list beker cooper fletcher miller smith))) (require ( miller cooper)) (require (not (= (abs (- fletcher cooper)) 1))) (display (list (list beker beker) (list cooper cooper) (list fletcher fletcher) (list miller miller) (list smith smith))) (newline) (amb))) ;;# real-time 0.798 ;;# user-time 0.8009999999999997 ;;# system-time 0.0 ;;;;;Amb-Eval value ;;# undef Exercise 4.41 ;; 2章でやった組合せのリストを得る premutations。 ;; 今見ても難しい。 (define (filter predicate sequence) (cond ((null? sequence) ()) ((predicate (car sequence)) (cons (car sequence) (filter predicate (cdr sequence)))) (else (filter predicate (cdr sequence))))) (define (accumulate op initial sequence) (if (null? sequence) initial (op (car sequence) (accumulate op initial (cdr sequence))))) (define (flatmap proc seq) (accumulate append () (map proc seq))) (define (permutations s) (if (null? s) (list ()) (flatmap (lambda (x) (map (lambda (p) (cons x p)) (permutations (remove x s)))) s))) (define (remove item sequence) (filter (lambda (x) (not (= x item))) sequence)) ;; (define (baker set) (list-ref set 0)) (define (cooper set) (list-ref set 1)) (define (fletcher set) (list-ref set 2)) (define (miller set) (list-ref set 3)) (define (smith set) (list-ref set 4)) (define sets (permutations (list 1 2 3 4 5))) (define (filter-p set) (and (not (= (baker set) 5)) (not (= (cooper set) 1)) (not (= (fletcher set) 5)) (not (= (fletcher set) 1)) ( (miller set) (cooper set)) ; (not (= (abs (- (smith set) (fletcher set))) 1)) (not (= (abs (- (fletcher set) (cooper set))) 1)))) (define (multiple-dwelling) (map (lambda (set) (display (list (list baker (baker set)) (list cooper (cooper set)) (list fletcher (fletcher set)) (list miller (miller set)) (list smith (smith set)))) (newline)) (filter filter-p sets))) ;;gosh (multiple-dwelling) ;;((baker 1) (cooper 2) (fletcher 4) (miller 3) (smith 5)) ;;((baker 1) (cooper 2) (fletcher 4) (miller 5) (smith 3)) ;;((baker 1) (cooper 4) (fletcher 2) (miller 5) (smith 3)) ;;((baker 3) (cooper 2) (fletcher 4) (miller 5) (smith 1)) ;;((baker 3) (cooper 4) (fletcher 2) (miller 5) (smith 1)) ;;(# undef # undef # undef # undef # undef ) Exercise 4.42 (define (require-Lair a b) (if a (require (not b)) (require b))) (define (Lairs) (let ((Betty (amb 1 2 3 4 5)) (Ethel (amb 1 2 3 4 5)) (Joan (amb 1 2 3 4 5)) (Kitty (amb 1 2 3 4 5)) (Mary (amb 1 2 3 4 5))) (require (distinct? (list Betty Ethel Joan Kitty Mary))) (require-Lair (= Kitty 2) (= Betty 3)) (require-Lair (= Ethel 1) (= Joan 2)) (require-Lair (= Joan 3) (= Ethel 5)) (require-Lair (= Kitty 2) (= Mary 4)) (require-Lair (= Mary 4) (= Betty 1)) (display (list (list Betty Betty) (list Ethel Ethel) (list Joan Joan) (list Kitty Kitty) (list Mary Mary)) ) (newline) (amb))) ;;;;;Amb-Eval input ;;(Lairs) ;;;;; Starting a new problem ;;((Betty 3) (Ethel 5) (Joan 2) (Kitty 1) (Mary 4)) ;;;;; There are no more values of ;;(Lairs) Exercise 4.43 ;; Lorna の父親は Colonel Downing (define (yacht) ;; father daughter yacht (let ((Moore (cons Ann Lorna)) (Downing (cons (amb Gabrielle Lorna Rosalind) Melissa)) (Hall (cons (amb Gabrielle Lorna) Rosalind)) (Hood (cons Melissa Gabrielle)) (Parker (cons (amb Gabrielle Lorna Rosalind) Ann))) (let ((alist (list Moore Hood Hall Downing Parker))) (require (distinct? (map car alist))) (require (eq? (cdr (assq Gabrielle alist)) (car Parker))) (display (list (list Moore Moore) (list Hood Hood) (list Hall Hall) (list Downing Downing) (list Parker Parker))) (newline)) (amb))) ;;;;; Starting a new problem ;;((Moore (Ann . Lorna)) (Hood (Melissa . Gabrielle)) (Hall (Gabrielle . Rosalind)) (Downing (Lorna . Melissa)) (Parker (Rosalind . Ann))) ;;;;; There are no more values of ;; Moore の娘が Ann という条件を外すと組合せは2通りとなる。 (define (yacht2) ;; father daughter yacht (let ((Moore (cons (amb Gabrielle Rosalind Ann) Lorna)) (Downing (cons (amb Gabrielle Lorna Rosalind Ann) Melissa)) (Hall (cons (amb Gabrielle Lorna Ann) Rosalind)) (Hood (cons Melissa Gabrielle)) (Parker (cons (amb Gabrielle Lorna Rosalind) Ann))) (let ((alist (list Moore Hood Hall Downing Parker))) (require (distinct? (map car alist))) (require (eq? (cdr (assq Gabrielle alist)) (car Parker))) (display (list (list Moore Moore) (list Hood Hood) (list Hall Hall) (list Downing Downing) (list Parker Parker))) (newline)) (amb))) ;;;;; Starting a new problem ;;((Moore (Gabrielle . Lorna)) (Hood (Melissa . Gabrielle)) (Hall (Ann . Rosalind)) (Downing (Rosalind . Melissa)) (Parker (Lorna . Ann))) ;;((Moore (Ann . Lorna)) (Hood (Melissa . Gabrielle)) (Hall (Gabrielle . Rosalind)) (Downing (Lorna . Melissa)) (Parker (Rosalind . Ann))) ;;;;; There are no more values of Exercise 4.44 ;; リスト要素の引算 (define (-list list-a list-b) (filter (lambda (x) (not (memq x list-b))) list-a)) ;; 追加されるカラムの斜め方向の安全性を確認する。 (define (attack? cols new-col) (define (iter cols n) (cond ((null? cols) #f) ((= (abs (- (car cols) new-col)) n) #t) (else (iter (cdr cols) (- n 1))))) (iter cols (length cols))) ;; 横方向の安全性をバックトラックを使わずに確認する版。 (define (8q-a) (define rows (list 1 2 3 4 5 6 7 8)) (define board ()) (let ((col1 (amb 1 2 3 4))) (set! board (list col1)) (let ((col2 (an-element-of (-list rows board)))) (require (not (attack? board col2))) (set! board (list col1 col2)) (let ((col3 (an-element-of (-list rows board)))) (require (not (attack? board col3))) (set! board (list col1 col2 col3)) (let ((col4 (an-element-of (-list rows board)))) (require (not (attack? board col4))) (set! board (list col1 col2 col3 col4)) (let ((col5 (an-element-of (-list rows board)))) (require (not (attack? board col5))) (set! board (list col1 col2 col3 col4 col5)) (let ((col6 (an-element-of (-list rows board)))) (require (not (attack? board col6))) (set! board (list col1 col2 col3 col4 col5 col6)) (let ((col7 (an-element-of (-list rows board)))) (require (not (attack? board col7))) (set! board (list col1 col2 col3 col4 col5 col6 col7)) (let ((col8 (an-element-of (-list rows board)))) (require (not (attack? board col8))) (set! board (list col1 col2 col3 col4 col5 col6 col7 col8)) (display board) (display " ") (display (map (lambda (x) (- 9 x)) board)) (newline) (amb) ))))))))) ;;# real-time 21.899 ;;# user-time 21.78200000000001 ;;# system-time 0.010000000000000009 ;;;;;Amb-Eval value ;;# undef ;; 横方向の安全性をバックトラックを逐次使って確認する版 (define (8q-b) (define board ()) (let ((col1 (amb 1 2 3 4))) (set! board (list col1)) (let ((col2 (amb 1 2 3 4 5 6 7 8))) (require (distinct? (cons col2 board))) (require (not (attack? board col2))) (set! board (list col1 col2)) (let ((col3 (amb 1 2 3 4 5 6 7 8))) (require (distinct? (cons col3 board))) (require (not (attack? board col3))) (set! board (list col1 col2 col3)) (let ((col4 (amb 1 2 3 4 5 6 7 8))) (require (distinct? (cons col4 board))) (require (not (attack? board col4))) (set! board (list col1 col2 col3 col4)) (let ((col5 (amb 1 2 3 4 5 6 7 8))) (require (distinct? (cons col5 board))) (require (not (attack? board col5))) (set! board (list col1 col2 col3 col4 col5)) (let ((col6 (amb 1 2 3 4 5 6 7 8))) (require (distinct? (cons col6 board))) (require (not (attack? board col6))) (set! board (list col1 col2 col3 col4 col5 col6)) (let ((col7 (amb 1 2 3 4 5 6 7 8))) (require (distinct? (cons col7 board))) (require (not (attack? board col7))) (set! board (list col1 col2 col3 col4 col5 col6 col7)) (let ((col8 (amb 1 2 3 4 5 6 7 8))) (require (distinct? (cons col8 board))) (require (not (attack? board col8))) (set! board (list col1 col2 col3 col4 col5 col6 col7 col8)) (display board) (display " ") (display (map (lambda (x) (- 9 x)) board)) (newline) (amb) ))))))))) ;;# real-time 33.231 ;;# user-time 33.048 ;;# system-time 0.019999999999999907 ;;;;;Amb-Eval value ;;# undef ;; 横方向・斜め方向の安全性をまとめてバックトラックで確認する版 (define (8q-c) (define board ()) (let ((col1 (amb 1 2 3 4)) (col2 (amb 1 2 3 4 5 6 7 8)) (col3 (amb 1 2 3 4 5 6 7 8)) (col4 (amb 1 2 3 4 5 6 7 8)) (col5 (amb 1 2 3 4 5 6 7 8)) (col6 (amb 1 2 3 4 5 6 7 8)) (col7 (amb 1 2 3 4 5 6 7 8)) (col8 (amb 1 2 3 4 5 6 7 8))) (require (distinct? (list col1 col2 col3 col4 col5 col5 col7 col8))) (require (and (not (attack? (list col1) col2)) (not (attack? (list col1 col2) col3)) (not (attack? (list col1 col2 col3) col4)) (not (attack? (list col1 col2 col3 col4) col5)) (not (attack? (list col1 col2 col3 col4 col5) col6)) (not (attack? (list col1 col2 col3 col4 col5 col6) col7)) (not (attack? (list col1 col2 col3 col4 col5 col6 col7) col8)))) (set! board (list col1 col2 col3 col4 col5 col6 col7 col8)) (display board) (display " ") (display (map (lambda (x) (- 9 x)) board)) (newline) )) ;;;;;Amb-Eval input ;;(time (8q-c)) ;;; Starting a new problem ;;# real-time 15797.877 ;;# user-time 14527.22 ;;# system-time 0.5309999999999999 ;;;Amb-Eval value ;;# undef Exercise 4.45 ;; 文法用語が入ると見づらいので、元の単語だけ出力する。訳は??? (define (ex4.45) (let ((s (parse (the professor lectures to the student in the class with the cat)))) (display s)(newline) (amb))) ;;;Amb-Eval input (ex4.45) ;;; Starting a new problem ((the professor) (((lectures (to (the student))) (in (the class))) (with (the cat)))) ;猫と一緒にクラスで生徒に教える。 ((the professor) ((lectures (to (the student))) (in ((the class) (with (the cat)))))) ;猫のいるクラスで生徒に教える。 ((the professor) ((lectures (to ((the student) (in (the class))))) (with (the cat)))) ;猫と一緒にクラスの生徒に教える。 ((the professor) (lectures (to (((the student) (in (the class))) (with (the cat)))))) ;クラスの猫と一緒の生徒に教える。 ((the professor) (lectures (to ((the student) (in ((the class) (with (the cat)))))))) ;猫のいるクラスの生徒に教える。 ;;; There are no more values of (ex4.45) Exercise 4.46 ;;文法は、例えば ;;(define (parse-sentence) ;; (list sentence ;; (parse-noun-phrase) ;; (parse-verb-phrase))) ;;(define (parse-simple-noun-phrase) ;; (list simple-noun-phrase ;; (parse-word articles) ;; (parse-word nouns))) ;;のように句の並びで定義され句は語の並びで定義されている。 ;;一方、文の解析は ;;(define (parse-word word-list) ;; (require (not (null? *unparsed*))) ;; (require (memq (car *unparsed*) (cdr word-list))) ;; (let ((found-word (car *unparsed*))) ;; (set! *unparsed* (cdr *unparsed*)) ;; (list (car word-list) found-word))) ;;のように、文の最初から語を取り出し、それが文法により句、文を構成 ;;するかどうかを確認している。 ;;これは 先に読み出した語は、リスト中の先の式によって使われることを ;;前提とした方法となっている。 Exercise 4.47 ;; 文が parse できる間は動作する。parse し尽くした状態で try-again ;; を入力すると loop となる。これは parse-varb-phrase が amb と再帰 ;; に対し終了条件を持たない構造となっているから。 ;; 一方 may-be-extend は extend がある場合に限り再帰を行っている。 (define (parse-verb-phrase) (amb (parse-word verbs) (list ; verb=phrase (parse-verb-phrase) (parse-prepositional-phrase)))) ;;;;;Amb-Eval input ;;(parse (the cat eats)) ;;;;; Starting a new problem ;;;;;Amb-Eval value ;;((the cat) eats) ;;;;;Amb-Eval input ;;try-again -- loop ;;;;;Amb-Eval input ;;(parse (the cat eats in the class)) ;;;;; Starting a new problem ;;;;;Amb-Eval value ;;((the cat) (eats (in (the class)))) ;;;;;Amb-Eval input ;;try-again -- loop ;;;;;Amb-Eval input ;;(parse (the cat eats in the class with the student)) ;;;;; Starting a new problem ;;;;;Amb-Eval value ;;((the cat) (eats (in ((the class) (with (the student)))))) ;;;;;Amb-Eval input ;;try-again ;;;;;Amb-Eval value ;;((the cat) ((eats (in (the class))) (with (the student)))) ;;;;;Amb-Eval input ;;try-again -- loop ;; こちらはすぐに loop (define (parse-verb-phrase) (amb (list ; verb=phrase (parse-verb-phrase) (parse-prepositional-phrase)) (parse-word vervs))) ;;;;;Amb-Eval input ;;(parse (the cat eats)) ;;;;; Starting a new problem ;; -- loop Exercise 4.48 ;; 形容詞を扱えるように拡張。副詞と重文は省略。 ;; simple-noun-phrase = article noun ;; adjective-noun-phrase = article adjective + noun ;; simple/adjective-noun-phrase = simple-noun-phrase | adjective-noun-phrase ;; noun-phrase = simple/adjective-noun-phrase prepositional-phrase * (define adjectives (adjective small big black white)) (define (parse-simple/adjective-noun-phrase) (amb (list simple-noun-phrase (parse-word articles) (parse-word nouns)) (list adjective-noun-phrase (parse-word articles) (parse-adjectives) (parse-word nouns)))) (define (parse-adjectives) (define (iter adjs) (amb adjs (iter (append adjs (list (parse-word adjectives)))))) (iter (list (parse-word adjectives)))) (define (parse-noun-phrase) (define (maybe-extend noun-phrase) (amb noun-phrase (maybe-extend (list noun-phrase noun-phrase (parse-prepositional-phrase))))) (maybe-extend (parse-simple/adjective-noun-phrase))) ;;;;;Amb-Eval input ;;(parse (the cat eats)) ;;;;; Starting a new problem ;;;;;Amb-Eval value ;;(sentence (simple-noun-phrase (article the) (noun cat)) (verb eats)) ;;;;;Amb-Eval input ;;(parse (the small cat eats)) ;;;;; Starting a new problem ;;;;;Amb-Eval value ;;(sentence (adjective-noun-phrase (article the) ((adjective small)) (noun cat)) (verb eats)) ;;;;;Amb-Eval input ;;(parse (the small white cat eats)) ;;;;; Starting a new problem ;;;;;Amb-Eval value ;;(sentence (adjective-noun-phrase (article the) ((adjective small) (adjective white)) (noun cat)) (verb eats)) Exercise 4.49 ;; 解答になっているのかな? (define (parse-word word-list) #;(list (car word-list) (list-ref word-list (+ (random (- (length word-list) 1)) 1))) (list-ref word-list (+ (random (- (length word-list) 1)) 1)) ) (define c 1) (define (generate-6-sentences) (display (parse ())) (newline) (if ( = c 6) done (begin (permanent-set! c (+ c 1)) (amb)))) ;;;;;Amb-Eval input ;;(generate-6-sentences) ;;;;; Starting a new problem ;;((a student) sleeps) ;;((a student) (sleeps (with (the class)))) ;;((a student) ((sleeps (with (the class))) (with (the cat)))) ;;((a student) (((sleeps (with (the class))) (with (the cat))) (to (the cat)))) ;;((a student) ((((sleeps (with (the class))) (with (the cat))) (to (the cat))) (to (the cat)))) ;;((a student) (((((sleeps (with (the class))) (with (the cat))) (to (the cat))) (to (the cat))) (with (a class)))) ;;;;;Amb-Eval value ;;done Exercise 4.50 Exercise 4.51 ;; analyze に追加 ((passignment? exp) (analyze-passignment exp)) ;; (define (passignment? exp) (tagged-list? exp permanent-set!)) (define (analyze-passignment exp) (let ((var (assignment-variable exp)) (vproc (analyze (assignment-value exp)))) (lambda (env succeed fail) (vproc env (lambda (val fail2) (set-variable-value! var val env) (succeed ok fail2))) fail))) ;; set! なら出力される count は常に1 (define (ex4_51) (define count 0) (let ((x (an-element-of (a b c))) (y (an-element-of (a b c)))) (permanent-set! count (+ count 1)) ;;(set! count (+ count 1)) (require (not (eq? x y))) (display (list x y count)) (newline) (amb))) ;;;;;Amb-Eval input ;;(ex4_51) ;;;;; Starting a new problem ;;(a b 2) ;;(a c 3) ;;(b a 4) ;;(b c 6) ;;(c a 7) ;;(c b 8) ;;;;; There are no more values of ;;(ex4_51) Exercise 4.52 ;; analyze に追加 ((if-fail? exp) (analyze-if-fail exp)) ;; (define (if-fail? exp) (tagged-list? exp if-fail)) (define (if-fail-usual exp) (cadr exp)) (define (if-fail-fail exp) (caddr exp)) (define (analyze-if-fail exp) (let ((uproc (analyze (if-fail-usual exp))) (fproc (analyze (if-fail-fail exp)))) (lambda (env succeed fail) (uproc env (lambda (u-value fail2) (succeed u-value fail2)) (lambda () (fproc env succeed fail)))))) ; (define (ex4_52a) (if-fail (let ((x (an-element-of (1 3 5)))) (require (even? x)) x) all-odd)) (define (ex4_52b) (if-fail (let ((x (an-element-of (1 3 5 8)))) (require (even? x)) x) all-odd)) ;;;;;Amb-Eval input ;;(ex4_52a) ;;;;; Starting a new problem ;;;;;Amb-Eval value ;;all-odd ;;;;;Amb-Eval input ;;(ex4_52b) ;;;;; Starting a new problem ;;;;;Amb-Eval value ;;8 Exercise 4.53 (define (ex4_53) (let ((pairs ())) (if-fail (let ((p (prime-sum-pair (1 3 5 8) (20 35 110)))) (permanent-set! pairs (cons p pairs)) (amb)) pairs))) ;;;;;Amb-Eval input ;;(ex4_53) ;;;;; Starting a new problem ;;;;;Amb-Eval value ;;((8 35) (3 110) (3 20)) Exercise 4.54 ;; analyze に追加 ((sf-require? exp) (amb-analyze-sf-require exp)) ;; (define (sf-require? exp) (tagged-list? exp sf-require)) (define (require-predicate exp) (cadr exp)) (define (analyze-sf-require exp) (let ((pproc (analyze (require-predicate exp)))) (lambda (env succeed fail) (pproc env (lambda (pred-value fail2) (if (not pred-value) (fail2) (succeed ok fail2))) fail)))) ;; (define (prime-sum-pair-for-ex4_54 list1 list2) (define (an-element-of items) (sf-require (not (null? items))) (amb (car items) (an-element-of (cdr items)))) (let ((a (an-element-of list1)) (b (an-element-of list2))) (sf-require (prime? (+ a b))) (list a b))) (define (ex4_54a) (display (prime-sum-pair-for-ex4_54 (1 3 5 8) (20 35 110))) (newline) (amb)) (define (ex4_54b) (display (prime-sum-pair (1 3 5 8) (20 35 110))) (newline) (amb)) ;;;;;Amb-Eval input ;;(ex4_54a) ;;;;; Starting a new problem ;;(3 20) ;;(3 110) ;;(8 35) ;;;;; There are no more values of ;;(ex4_54a)
https://w.atwiki.jp/satoschi/pages/7381.html
チャン・ナガ語 |Sino-Tibetan languages|Tibeto-Burman languages|Jingpho-Konyak-Bodo languages| 言語類型 現用言語 使用文字 ラテン文字【Latn?】 type living language writing system Latin alphabet ISO 639-3 【nbc】 言語名別称 alternate names Changyanguh Chang チャン語 Machongrr Mochumi Mochungrr Mojung 方言名 dialect names 参考文献 references WEB ISO 639-3 Registration Authority - SIL International the LINGUIST List Ethnologue
https://w.atwiki.jp/satoschi/pages/7385.html
ノクテ・ナガ語 |Sino-Tibetan languages|Tibeto-Burman languages|Jingpho-Konyak-Bodo languages| 言語類型 現用言語 使用文字 type living language writing system ISO 639-3 【njb】 言語名別称 alternate names Borduria Jaipuria Mohongia Namsangia Nocte Nokte Paniduria 方言名 dialect names Khapa Laju Ponthai (Lamlak) 参考文献 references WEB ISO 639-3 Registration Authority - SIL International the LINGUIST List Ethnologue
https://w.atwiki.jp/satoschi/pages/7382.html
* |Sino-Tibetan languages|Tibeto-Burman languages|Jingpho-Konyak-Bodo languages| 言語類型 現用言語 使用文字 ラテン文字【Latn?】 type living language writing system Latin alphabet ISO 639-3 【kix】 言語名別称 alternate names Aoshedd Kalyokengnyu Khiamngan キアムンガン語 Khiamniungan Nokaw Welam 方言名 dialect names 参考文献 references WEB ISO 639-3 Registration Authority - SIL International Ethnologue
https://w.atwiki.jp/willproject/pages/179.html
种族名:娜迦(别名“龙人”) 活动范围:南海部分岛屿偶有发现,也有在沿海地区的目击报告。 外形 成年体从头至尾全长4~8米,在靠近腰附近化为人形,部分目击报告中指出有长有3对手的个体存在。本族群外形上有时会和蛇兽人族混淆,但其实两者有着很大区别:首先,娜迦比蛇族略微强壮,比起瘦弱的蛇族兽人外形更接近人类女性(人形部分);其次,娜迦的耳部呈鳍状,后面有腮;最后,娜迦没有形态变化能力,但在成年后可以通过“祭礼来改变外形。 发源: 按照有限的交流记载,娜迦自称是水龙所创造出的生物,因此也被部分学者给予“龙(之传)人”的称呼,不过其实和真正的龙人族大相径庭。 生态: 虽然有着冷血动物的外表,但娜迦却是温血、胎生的。娜迦自出生后大约花13~15年性成熟,这时的娜迦族的人形部分完全与人类少女一样,也被称为少女期,此时的娜迦虽然可以与人类或其他种族交配但不会生下后代。到150岁左右娜迦才进入“成年”,娜迦的成年必须经过“祭礼”,“祭礼”的本质是一种魔法仪式,在祭礼上娜迦将进行生命中唯一一次的蜕皮,变成拥有3对手,具备强大魔法能量的生物,而同时具有了雄性和雌性的生殖器官。成年的娜迦可以和少女期或成年期娜迦交配生育后代。由于少女期和成年期娜迦的年龄相隔太久,所以娜迦的出生率并不高,种群数量也很小。 目前只偶尔有目击到成年娜迦,从来没有老年娜迦的目击报告,据推测寿命至少在300年以上。娜迦族人对其墓葬地都讳莫如深,所以还没有人见过娜迦的尸骨 娜迦可以利用耳后的腮在水里活动,但由于腮不像鱼类那样发达,因此不能长期居住在水中,但仍然比人在水中的活动时间长得多。奇特的是,由于被龙赋予了力量,娜迦拥有其他两栖或水生生物所没有的火抗性和使用火元素魔法的能力。 文化: 娜迦与大陆文明很少有交流,并不信奉大陆所流行的宗教,而是将其创造者称作“古神”来祭祀。娜迦族的衣服只有几条布组成,但很喜欢穿戴饰物,不少饰物似乎蕴藏着魔法能量。作为古老的种族,娜迦族自己使用的语言似乎是古精灵语的变种,不过也有部分娜迦族人会使用通用语以和人类交流。
https://w.atwiki.jp/todo314/pages/183.html
Locating the Source of Diffusion in Large-Scale Network Pedro C. Pinto, Patrick Thiran, Martin Vetterli PRL 2012 概要 情報拡散の話 一部の頂点だけを観測して、「「発信源」」を推定する モデル化+実験 モデル 辺の時間 正規分布 負の値はごまかす 発信源 uniformly at randomに選択される 受信者 時刻+ソース 他の頂点に伝えない 理不尽な仮定はおかない 受信者がネットワークを分離したり、最初の観測時刻だけ記録 問題設定 入力 グラフ G=(V,E) 分布 μ_e、σ_e 受信者・受信時刻の集合 出力 発信源s アプローチ 木なら? 受信者は葉にいる あ、はい 発信時刻が分かる場合も分からん場合も考える 一般の場合 仮定 発信源から受信者まで情報は最短経路を伝わる ( ゚д゚)ハァ? BFS木の上を求めてその上で木の場合のをやる PRL information diffusion 2014-01-30 17 19 42 (Thu)
https://w.atwiki.jp/tmiya/pages/125.html
Scala ひと巡り (A Tour of Scala) 原ページ Published on The Scala Programming Language (http //www.scala-lang.org) . By admin . Created 2008-07-05, 20 31 Scala は簡潔でエレガント、そして型安全な方法で共通のプログラミングパターンを表現できるよう設計された現代的なマルチパラダイム・プログラミング言語です。 オブジェクト指向の特徴と関数型言語の特質をスムーズに統合します。 Scala はオブジェクト指向言語です すべての値がオブジェクトである [1]という意味で、Scala は純粋なオブジェクト指向言語です。オブジェクトの型と振る舞いをクラス [2]とトレイト [3]によって記述します。 クラスはサブクラス化 [4]と、多重継承の欠点のない置換えである、柔軟なミックスインベースの合成 [5]メカニズムにより拡張されます。 Scala は関数型言語です すべての関数が値である[1]という意味で、Scala は関数型言語でもあります。 Scala は無名関数の定義に簡単な構文 [6]を提供します。それは高階関数 [7]をサポートし、関数のネストを可能とし[8]、カリー化 [9]をサポートします。 Scala のケースクラス [10]とパターンマッチィング [11]の組み込みサポートは、多くの関数型プログラミング言語で使われる代数型をモデル化します。 Furthermore, Scala's notion of pattern matching naturally extends to the processing of XML data [12] with the help of right-ignoring sequence patterns [13]. In this context, sequence comprehensions [14] are useful for formulating queries. さらに、Scala のパターンマッチィングの概念は、右無視シーケンスパターン(right-ignoring sequence pattern) [13]の助けにより、XML データ [12]の処理へ自然に拡張されます。このコンテキストにおいて、シーケンス内包表記(sequence comprehensions) [14]はクエリの定式化に対して役立ちます。 これらの特徴により Scala は、Web サービス[15]のようなアプリケーション開発に理想的なものとなっています。 Scala は静的な型付け言語です Scala は、抽象化が安全で理路整然とした方法でなされることを静的に強制する、表現力豊かな型システムを備えています。 特に、型システムは次をサポートします。 ジェネリッククラス (generic classes [16]) 変位指定アノテーション (variance annotations [17]) 上/下限 型境界 (upper[18] and lower[19] type bounds) 内部クラスとオブジェクトメンバーとしての抽象型 (inner classes [20] and abstract types [21] as object members) 複合型 (compound types [22]) 明示的に型付けされた自己参照 (explicitly typed self references [23]) ビュー (view [24]) 多相的メソッド (polymorphic methods [25]) ローカルな型推論 [26]機構により、ユーザーはプログラムに冗長な型情報で注釈を付ける必要がありません。 これらフィーチャーの組み合わせは、プログラミング抽象の安全な再利用とソフトウェアの型安全な拡張に対して、強力な基盤を提供します。 Scala は拡張性に富んでいます 現場では、固有領域のアプリケーション開発はしばしば領域固有の言語拡張を必要とします。Scala は、新たな言語要素をライブラリの形でスムーズに容易に加えることができる言語メカニズムのユニークな組合せを提供します どのようなメソッドも中置あるいは後置演算子 [27]として使うことができます。そして 要請型(expected type 期待される型)に応じて、クロージャが自動的に構成されます[28](target typing ターゲットによる型付け)。 両フィーチャーの共同使用は、構文拡張なしの、またマクロのようなメタプログラミングファシリティの助けを借りない、新しい文定義を促進します。 Scala は Java や .NET と相互運用できます Scala は、ポピュラーな Java 2 実行環境(JRE [29])とうまく相互運用できるように設計されています。 特に、主流のオブジェクト指向 Java プログラミング言語との相互作用は可能な限りスムーズです。 Scala は、Java と同列のコンパイルモデル(ダイナミックなクラスローディング、分割コンパイル)を採用しており、既存の何千もの高品質ライブラリにアクセスできます。 .NET フレームワーク(CLR [30])のサポートも同様に利用できます。 さらに次のページをお読みください。 Scala ひと巡り 抽象型 (Abstract Types) Scala ひと巡り アノテーション (Annotations) Scala ひと巡り クラス (Classes) Scala ひと巡り ケースクラス (Case Classes) Scala ひと巡り 事前定義された classOf 関数 (Predefined function classOf) Scala ひと巡り 複合型 (Compound Types) Scala ひと巡り シーケンス内包表記 (Sequence Comprehensions) Scala ひと巡り 抽出子オブジェクト (Extractor Objects) Scala ひと巡り ジェネリッククラス (Generic Classes) Scala ひと巡り 暗黙のパラメータ (Implicit Parameters) Scala ひと巡り 内部クラス (Inner Classes) Scala ひと巡り ミックスインクラス合成 (Mixin Class Composition) Scala ひと巡り 関数のネスト (Nested Functions) Scala ひと巡り 無名関数の構文 (Anonymous Function Syntax) Scala ひと巡り カリー化 (Currying) link_anchor plugin error 画像もしくは文字列を必ずどちらかを入力してください。{ Scala ひと巡り 型依存クロージャの自動構築 (Automatic Type- link_anchor plugin error idが指定されていないか、存在しないページを指定しています。 Scala ひと巡り オペレータ (Operators) Scala ひと巡り 高階関数 (Higher-Order Functions) Scala ひと巡り パッケージ (Packages) Scala ひと巡り パターンマッチィング (Pattern matching) Scala ひと巡り 多相的メソッド (Polymorphic Methods) Scala ひと巡り 正規表現パターン (Regular Expression Patterns) Scala ひと巡り sealed クラス (Sealed Classes) Scala ひと巡り トレイト (Traits) Scala ひと巡り 上限 型境界 (Upper Type Bounds) Scala ひと巡り 下限 型境界 (Lower Type Bounds) Scala ひと巡り 明示的に型付けられた自己参照 (Explicitly Typed Self References) Scala ひと巡り サブクラス化 (Subclassing) Scala ひと巡り ローカルな型推論 (Local Type Inference) Scala ひと巡り 統一された型 (Unified Types) Scala ひと巡り 変位指定 (Variances) Scala ひと巡り ビュー (Views) Scala ひと巡り XML 処理 (XML Processing) Scala ひと巡り 抽象型 (Abstract Types) 原ページ Scala では、クラスは値(コンストラクタ・パラメータ)と(もしクラスがジェネリック [16]なら)型でパラメータ化されます。 単に規則に従って、オブジェクトメンバーとして値を持てるというばかりではありません; 値と共に、型はオブジェクトのメンバーです。 さらに、メンバーの両形式とも、具象あるいは抽象で構いません。 次の例は、クラス Buffer のメンバーとして、延期された値定義と抽象型定義の両方を定義しています。 abstract class Buffer { type T val element T } 抽象型はその素性が正確には知られていない型です。 上記の例で、我々は、クラス Buffer の各オブジェクトが 型メンバー T を持つことだけを知っています。しかしクラス Buffer の定義は、メンバー型 T がどのような具象(具体的な)型に対応するのかを明らかにしません。 値定義と同じように、サブクラス中で型定義をオーバライドできます。 これにより、(抽象型の、可能な具象インスタンス化を記述する)型境界を厳しくすることで、抽象型についてより多くの情報を明らかにできます 次のプログラムでは、型 T が新しい抽象型 U のサブ型でなければならないと述べることで、バッファ中にシーケンスのみを記憶できるクラス SeqBuffer を得ます abstract class SeqBuffer extends Buffer { type U type T Seq[U] def length = element.length } 抽象型メンバーをもつトレイトあるいはクラス [2]は、無名クラスのインスタンス化と組合せてしばしば使われます。 このことを示す例として、整数リストを参照するシーケンスバッファを扱う、次のプログラムを見てみます。 abstract class IntSeqBuffer extends SeqBuffer { type U = Int } object AbstractTypeTest1 extends Application { def newIntSeqBuf(elem1 Int, elem2 Int) IntSeqBuffer = new IntSeqBuffer { type T = List[U] val element = List(elem1, elem2) } val buf = newIntSeqBuf(7, 8) println("length = " + buf.length) println("content = " + buf.element) } メソッド newIntSeqBuf の戻り値型は、型 U が toInt に等価になった、トレイト Buffer の特化を参照します。 メソッド newIntSeqBuf 本体内における無名クラスのインスタンス化で、似たような型エイリアスを使っています。 ここで、型 T が List[Int]を参照する IntSeqBuffer の新しいインスタンスを生成します。 抽象型メンバーをクラスの型パラメータに変えることや、その逆も可能であることに注意してください。 次は、上記コードの型パラメータだけを使うバージョンです abstract class Buffer[+T] { val element T } abstract class SeqBuffer[U, +T Seq[U]] extends Buffer[T] { def length = element.length } object AbstractTypeTest2 extends Application { def newIntSeqBuf(e1 Int, e2 Int) SeqBuffer[Int, Seq[Int]] = new SeqBuffer[Int, List[Int]] { val element = List(e1, e2) } val buf = newIntSeqBuf(7, 8) println("length = " + buf.length) println("content = " + buf.element) } ここでは変位指定アノテーション [17]を使う必要があることに注意してください; そうでなければ、メソッド newIntSeqBuf が返すオブジェクトの具象シーケンス実装型を隠せなくなります。 さらにまた、型パラメータを抽象型で置き換えできない場合があります。 Scala ひと巡り アノテーション (Annotations) 原ページ アノテーションは、定義にメタ情報を関連づけます。 単純なアノテーション節は、@C あるいは @C(a1,...,an) の形です。 ここで、C はクラス C のコンストラクタで、scala.Annotation [31]に適合しなくてはなりません。 All given constructor_arguments a1,...,an must be constant_expressions (i.e., expressions on numeral literals, strings, class_literals, Java enumerations and one-dimensional arrays of them) . 与えられたコンストラクタ引数 a1,...,an はすべて、定数式(すなわち、数値リテラル、文字列、クラスリテラル、Java enumとそれらの 1 次元配列上の式)でなければなりません。 アノテーション節は、その後に続く、最初の定義または宣言に適用されます。 1 つ以上のアノテーション節が定義や宣言に先行するかもしれません。 それら節の与えられた順番は重要ではありません。 アノテーション節の意味は処理系依存です。 Java プラットフォームでは、次の Scala アノテーションは標準的な意味を持っています。 Scala Java scala.SerialVersionUID [32] serialVersionUID [33] (フィールド) scala.cloneable [34] java.lang.Cloneable [35] scala.deprecated [36] java.lang.Deprecated [37] scala.inline [38] (2.6.0から) 等価なもの無し scala.native [39] (2.6.0から) native [40] (キーワード) scala.remote [41] java.rmi.Remote [42] scala.serializable [43] java.io.Serializable [44] scala.throws [45] throws [40] (キーワード) scala.transient [46] transient [40] (キーワード) scala.unchecked [47] (2.4.0から) 等価なもの無し scala.volatile [48] volatile [40] (キーワード) scala.reflect.BeanProperty [49] Design pattern [50] 次の例では、Java main プログラム中で例外送出をキャッチするために、メソッド read の定義に throws アノテーションを加えています。 Java コンパイラは、どのチェック例外がメソッドあるいはコンストラクタの実行によって引き起こされるか分析し、プログラムがチェック例外 [51]用のハンドラを含むことを確認します。 起きる可能性のある各チェック例外に対して、メソッドあるいはコンストラクタの throw 節では、その例外クラスあるいはその例外クラスのスーパークラスの 1 つに言及しなくてはなりません。 Scala にはチェック例外がないので、Java コードが Scala メソッドの送出する例外を捕えることができるように、Scala メソッドに 1 つ以上の throws アノテーションをつける必要があります。 package examples import java.io._ class Reader(fname String) { private val in = new BufferedReader(new FileReader(fname)) @throws [45](classOf [52][IOException]) def read() = in.read() } 次の Java プログラムはファイルの内容を印字します。ファイル名は main メソッドに最初の引数として渡されます。 package [[test]]; import examples.Reader; // Scala クラス !! public class AnnotaTest { public static void main(String[] args) { try { Reader in = new Reader(args[0]); int c; while ((c = in.read()) != -1) { System.out.print((char) c); } } catch (java.io.Exception e) { System.out.println(e.getMessage()); } } } クラス Reader 中の throws アノテーションをコメントアウトすると、Java main プログラムのコンパイル時に、次のエラーメッセージが出力されます Main.java 11 Exception java.io.IOException is never thrown in body of corresponding try statement corresponding try statement } catch (java.io.IOException e) { ^ 1 error Java アノテーション 注意 Java アノテーションの -target jvm-1.5 オプションの使用を確認してください。 Java 1.5 は、アノテーション [53]の形でユーザー定義メタデータを導入しました。 アノテーションの重要な特徴は、指定された名前と値の対に依存して、それら要素を初期化することです。 例えば、もしあるクラスのソースを追跡するアノテーションが必要なら、次のように定義するかもしれません。 Java annotations @interface Source { public String URL(); public String mail(); } それを次のように適用してください @Source(URL = "http //coders.com/", mail = "support@coders.com") public class MyClass extends HisClass ... Scala のアノテーション適用は、Java アノテーションのインスタンス化のために名前付き引数を使う必要があるので、コンストラクタ呼び出しのように見えます。 @Source(URL = "http //coders.com/", mail = "support@coders.com") class MyScalaClass ... もしアノテーションが(デフォルト値をもたない) ただ 1 つの要素を含むだけなら、この構文はたいへんうんざりします。そこで、規約により(by convention)、もし名前を値として指定するなら、それをコンストラクタに似た構文を使って Java 中で適用できます。 @interface SourceURL { public String value(); public String mail() default ""; } それを次のように適用してください @SourceURL("http //coders.com/") public class MyClass extends HisClass ... In this case, Scala provides the same possiblity. この場合、Scala は同じことを提供します。 @SourceURL("http //coders.com/") class MyScalaClass ... mail 要素はデフォルト値を指定されたので、それに明示的に値を与える必要はありません。 しかし、もしそうする必要があっても、Java 中で 2 つのスタイルを混ぜて適応させることはできません。 @SourceURL(value = "http //coders.com/", mail = "support@coders.com") public class MyClass extends HisClass ... Scala はこの点に関してより柔軟です。 @SourceURL("http //coders.com/", mail = "support@coders.com") class MyScalaClass ... この拡張された構文は、.NET のアノテーションでも同じあり、それらアノテーションのフルの能力を引き出します。 Scala ひと巡り クラス (Classes) 原ページ Scala のクラスは静的なテンプレートであり、実行時にたくさんのオブジェクトへインスタンス化されます。 次は、クラス Point を定義するクラス定義です class Point(xc Int, yc Int) { var x Int = xc var y Int = yc def move(dx Int, dy Int) { x = x + dx y = y + dy } override def toString() String = "(" + x + ", " + y + ")"; } クラスは 2 つの変数 x と y、2 つのメソッド move と toString を定義します。 move は 2 つの整数を引数にとりますが、値を返しません (暗黙の戻り値型 Unit は、Java ライクな言語の void に相当します)。他方、toString は引数をとらず、String 値を返します。 toString は事前定義された toString メソッドをオーバライドするので、override フラグでタグ付けしなければなりません。 Scala のクラスは、コンストラクタ引数でパラメータ化されます。 上記のコードは 2 つのコンストラクタ引数 xc と yc を定義します;それらは共にクラス本体全体で可視です。 この例では、それらは変数 x と y の初期化に使われます。 クラスは、次の例が示すように、new プリミティブでインスタンス化されます object Classes { def main(args Array[String]) { val pt = new Point(1, 2) println(pt) pt.move(10, 10) println(pt) } } このプログラムは実行可能なアプリケーション Classes を、main メソッドをもつトップレベルのシングルトンオブジェクトの形で定義します。 main メソッドは新しい Point を生成し、それを値 pt に記憶します。 val 構文で定義された値は、それらの更新が許されない点が、var 構文(上記 クラス Point 参照)で定義された変数とは異なることに注意してください; すなわち、値(value)は不変です。 次はプログラムの出力です (1, 2) (11, 12) Scala ひと巡り ケースクラス (Case Classes) 原ページ Scala はケースクラスの概念をサポートします。ケースクラスは通常のクラスであり、そのコンストラクタ・パラメータをエクスポートし、パターンマッチィング [11]を通して再帰的な分解メカニズムを提供します。 次は、1 つの抽象スーパークラス Term と 3 つの具象ケースクラス Var、Fun と App からなるクラス階層の例です。 abstract class Term case class Var(name String) extends Term case class Fun(arg String, body Term) extends Term case class App(f Term, v Term) extends Term このクラス階層は、型付けされていない(untyped) λ計算 [54]の項を表現するのに使えます。 ケースクラスのインスタンス構築にあたり、Scala では new プリミティブを使う必要がありません。 単純に、クラス名を関数として使用できます。 次は 1 つの例です Fun("x", Fun("y", App(Var("x"), Var("y")))) ケースクラスのコンストラクタ・パラメータは公開の値として扱われ、直接アクセスできます。 val x = Var("x") Console.println(x.name) すべてのケースクラスに対して、Scala コンパイラは、構造的等価性を実装する equals メソッドと toString メソッドを生成します。 たとえば val x1 = Var("x") val x2 = Var("x") val y1 = Var("y") println("" + x1 + " == " + x2 + " = " + (x1 == x2)) println("" + x1 + " == " + y1 + " = " + (x1 == y1)) は、次のように印字するでしょう。 Var(x) == Var(x) = true Var(x) == Var(y) = false もしパターンマッチィングをデータ構造の分解に使うなら、ケースクラスを定義することは道理にかなっています。 次のオブジェクトは、λ計算を表現するプリティプリンタ関数を定義します object TermTest extends Application { def printTerm(term Term) { term match { case Var(n) = print(n) case Fun(x, b) = print("^" + x + ".") printTerm(b) case App(f, v) = Console.print("(") printTerm(f) print(" ") printTerm(v) print(")") } } def isIdentityFun(term Term) Boolean = term match { case Fun(x, Var(y)) if x == y = true case _ = false } val id = Fun("x", Var("x")) val t = Fun("x", Fun("y", App(Var("x"), Var("y")))) printTerm(t) println println(isIdentityFun(id)) println(isIdentityFun(t)) } この例で関数 print は、パターンマッチィング文として表現されており、それは match キーワードで始まる case Pattern = Body 節の並びから成っています。 上記のプログラムは、与えられた項が単純な識別関数に対応するかどうかチェックする関数 isIdentityFun も定義します。 この例は、深いパターンとガードを使います。 与えられた値をもつパターンとマッチした後、その(キーワード if の後に定義された)ガードが評価されます。 もしそれが true を返すなら、マッチは成功です。;そうでなければ失敗であり、次のパターンが試みられます。 Scala ひと巡り 事前定義された classOf 関数 (Predefined function classOf) 原ページ 事前定義された関数 classOf[T]は、 Scala のクラス型 T の実行時表現を返します。 次の Scala コード例は、 args パラメータの実行時表現を印字します object ClassReprTest { abstract class Bar { type T AnyRef def bar(x T) { println("5 " + x.getClass()) } } def main(args Array[String]) { println("1 " + args.getClass()) println("2 " + classOf[Array[String]]) new Bar { type T = Array[String] val x T = args println("3 " + x.getClass()) println("4 " + classOf[T]) }.bar(args) } } 次は Scala プログラムの出力です 1 class [Ljava.lang.String; 2 class [Ljava.lang.String; 3 class [Ljava.lang.String; 4 class [Ljava.lang.String; 5 class [Ljava.lang.String; Scala ひと巡り 複合型 (Compound Types) 原ページ ときには、オブジェクトの型が、他の複数の型のサブ型であると表現することが必要になります。 Scala では、それをオブジェクト型の論理積である複合型(compound types)の助けをかりて表現できます。 2 つのトレイト Cloneable と Resetable があるとします。 trait Cloneable extends java.lang.Cloneable { override def clone() Cloneable = { super.clone(); this } } trait Resetable { def reset Unit } いま、オブジェクトを引数にとってクローンし、オリジナルのオブジェクトをリセットする関数 cloneAndReset を書きたいとします。 def cloneAndReset(obj ?) Cloneable = { val cloned = obj.clone() obj.reset cloned } パラメータ obj の型は何か、という問題が生じます。 もしそれが Cloneable なら、オブジェクトはクローンできますがリセットできません。; しかしもし Resetable なら、リセットできますがクローン操作がありません。 そのような状況で型キャストを避けるために、obj の型が Cloneable と Resetable の両方であると指定できます。 Scala では、複合型を使って Cloneable with Resetable のように書きます。 次は、アップデートした関数です def cloneAndReset(obj Cloneable with Resetable) Cloneable = { //... } 複合型は複数のオブジェクト型からなり、既存のオブジェクトメンバーのシグニチャを狭めるのに使える、ただ一つの細別(refinement)を持てます。 一般的な書き方は A with B with C ... { refinement } です。 細別の使用例は、抽象型 [21]に関するページにあります。 Scala ひと巡り シーケンス内包表記 (Sequence Comprehensions) 原ページ Scala は、シーケンス内包表記式に対して簡単な表記法を提供します。 内包表記は for enums yield e の形をしています。ここで enums は、セミコロンで分離された列挙子のリストを参照します。 列挙子は、新しい変数を導入する生成子、あるいは、フィルタです。 内包表記は、列挙子 enum によって生成された各束縛にごとに、本体 e を評価し、それら値のシーケンスを返します。 次は 1 つの例です object ComprehensionTest1 extends Application { def even(from Int, to Int) List[Int] = for (i - List.range(from, to) if i % 2 == 0) yield i Console.println(even(0, 20)) } 関数 even 中の for 式は Int 型の新しい変数 i を導入し、それをリスト List(from,from + 1,...,to - 1) の全ての値へ次々に束縛します。 ガード if i % 2 == 0 は、(式 i だけからなる)本体が偶数の場合のみ評価されるよう、全ての奇数をフィルターします。 最終的に、for 式全体は偶数のリストを返します。 プログラムは次を出力します List(0, 2, 4, 6, 8, 10, 12, 14, 16, 18) 次はより複雑な例で、その合計が与えられた値 v と等しい、0 から n - 1 までの数の対をすべて計算します。 object ComprehensionTest2 extends Application { def foo(n Int, v Int) = for (i - 0 until n; j - i + 1 until n if i + j == v) yield Pair(i, j); foo(20, 32) foreach { case (i, j) = println("(" + i + ", " + j + ")") } } この例は、内包表記がリストに制限されないことを示しています。 前のプログラムは、代わりにイテレータを使っています。 (適切な型をもつ) 操作 filter、map そして flagMapをサポートするすべてのデータ型は、シーケンス内包表記中で使えます。 次はプログラムの出力です (13, 19) (14, 18) (15, 17) シーケンス内包表記で Unitを返す、特別の形式もあります。 そこでは、生成子のリストとフィルターから生成される束縛は、副作用を起こさせるために使われます。 そのようなシーケンス内包表記を利用するには、プログラマはキーワード yield を取り除かなければなりません。 次は、前のものと等価ではあるが Unit を返す、特別な for 内包表記を使うプログラムです。 object ComprehensionTest3 extends Application { for (i - Iterator.range(0, 20); j - Iterator.range(i + 1, 20) if i + j == 32) println("(" + i + ", " + j + ")") } Scala ひと巡り 抽出子オブジェクト (Extractor Objects) 原ページ Scala では、パターンをケースクラスとは独立に定義できます。 この目的のために、unapply という名前のメソッドが定義されて、いわゆる抽出子をもたらします。 例えば、次のコードは抽出子オブジェクト Twice を定義します。 object Twice { def apply(x Int) Int = x * 2 def unapply(z Int) Option[Int] = if (z%2 == 0) Some(z/2) else None } object TwiceTest extends Application { val x = Twice(21) x match { case Twice(n) = Console.println(n) } // prints 21 } 次は、ここで関係する 2 つの文法上の規約(convention)です パターン case Twice(n)は、Twice.unapply の呼び出しを引き起こし、偶数のマッチに使われます。; unapply の戻り値は、引数がマッチしたかどうか、そしてさらなるマッチングのために使えるサブ値を伝えます。 ここで、サブ値は z/2 です。 The apply_method is not necessary for pattern matching. It is only used to mimic a constructor val x = Twice(21) expands to val x = Twice.apply(21) . apply メソッドは、パターンマッチィングについては必須ではありません。 これはただ、コンストラクタをまねて val x = Twice(21) を val x = Twice.apply(21) へ展開する時に使われるだけです。 unapply の戻り値型は、次のように選ぶべきです もしそれが単なるテストなら、Boolean を返す。たとえば case even() 。 もしそれがただ一つの、型 T のサブ値を返すなら、Option[T]を返す。 もし複数のサブ値 T1,...,Tn を返したいなら、 それらをまとめてタプルのオプション Option[(T1,...,Tn)]として返す。 しばしば、サブ値の数が固定で、シーケンスを返したいことがあります。 その場合は、unapplySeq を介して同様にパターンを定義できます。 最後のサブ値の型 Tn は、Seq[S]でなければなりません。 このメカニズムは、たとえば、パターン case List(x1,...,xn) 中で使われます。 抽出子を使えば、コードはさらに保守しやすくなります。 詳細は、Emir [56]、Odersky[57] と Williams (2007 年 1 月) らによる論文「 パターンを用いたオブジェクトマッチング」[55](4 章参照) を読んでください。 目次 次
https://w.atwiki.jp/lslwiki/pages/315.html
llSetScale llSetScale( vector サイズ ) 機能概略 プリムの"サイズ"をセットします。 サンプル integer iCHANNEL = 42; list lIDOLS = ["Iori Minase", "Makoto Kikuchi", "Ami Mami Futami" , "Yayoi Takatuki", "Ritsuko Akituki","Azusa Miura", "Haruka Amami","Chihaya Kisaragi","Yukiho Hagiwara","Miki Hosii"]; default { state_entry() { [[llListen]](iCHANNEL, "", NULL_KEY, ""); } touch_start(integer total_number) { [[llDialog]]([[llDetectedKey]](0), "Select Idol", lIDOLS, iCHANNEL); } listen(integer channel, string name, key id, string message) { vector vPOS=[[llGetPos]](); vector vSCL=[[llGetScale]](); float fSCLZ=vSCL.z; if(message == "Iori Minase") { [[llSetPos]](vPOS- 0,0,fSCLZ/2 + 0,0,0.75 ); llSetScale( 0.5, 0.5, 1.50 ); [[llSetText]]([[llUnescapeURL]]("%E6%B0%B4%E7%80%AC%E3%80%80%E4%BC%8A%E7%B9%94") +"\nHeight 150cm", 1,1,1 ,1.0); } else if(message == "Makoto Kikuchi") { llSetPos(vPOS- 0,0,fSCLZ/2 + 0,0,0.785 ); llSetScale( 0.5, 0.5, 1.57 ); llSetText(llUnescapeURL("%E8%8F%8A%E5%9C%B0%E3%80%80%E7%9C%9F") +"\nHeight 157cm", 1,1,1 ,1.0); } else if(message == "Ami Mami Futami") { llSetPos(vPOS- 0,0,fSCLZ/2 + 0,0,0.745 ); llSetScale( 0.5, 0.5, 1.49 ); llSetText(llUnescapeURL("%E5%8F%8C%E6%B5%B7%E3%80%80%E4%BA%9C%E7%BE%8E") +llUnescapeURL("%E3%83%BB%E7%9C%9F%E7%BE%8E") +"\nHeight 149cm", 1,1,1 ,1.0); } else if(message == "Yayoi Takatuki") { llSetPos(vPOS- 0,0,fSCLZ/2 + 0,0,0.725 ); llSetScale( 0.5, 0.5, 1.45 ); llSetText(llUnescapeURL("%E9%AB%98%E6%A7%BB%E3%80%80%E3%82%84%E3%82%88%E3%81%84") +"\nHeight 145cm", 1,1,1 ,1.0); } else if(message == "Ritsuko Akituki") { llSetPos(vPOS- 0,0,fSCLZ/2 + 0,0,0.78 ); llSetScale( 0.5, 0.5, 1.56 ); llSetText(llUnescapeURL("%E7%A7%8B%E6%9C%88%E3%80%80%E5%BE%8B%E5%AD%90") +"\nHeight 156cm", 1,1,1 ,1.0); } else if(message == "Azusa Miura") { llSetPos(vPOS- 0,0,fSCLZ/2 + 0,0,0.84 ); llSetScale( 0.5, 0.5, 1.68 ); llSetText(llUnescapeURL("%E4%B8%89%E6%B5%A6%E3%80%80%E3%81%82%E3%81%9A%E3%81%95") +"\nHeight 168cm", 1,1,1 ,1.0); } else if(message == "Haruka Amami") { llSetPos(vPOS- 0,0,fSCLZ/2 + 0,0,0.79 ); llSetScale( 0.5, 0.5, 1.58 ); llSetText(llUnescapeURL("%E5%A4%A9%E6%B5%B7%E3%80%80%E6%98%A5%E9%A6%99") +"\nHeight 158cm", 1,1,1 ,1.0); } else if(message == "Chihaya Kisaragi") { llSetPos(vPOS- 0,0,fSCLZ/2 + 0,0,0.81 ); llSetScale( 0.5, 0.5, 1.62 ); llSetText(llUnescapeURL("%E5%A6%82%E6%9C%88%E3%80%80%E5%8D%83%E6%97%A9") +"\nHeight 162cm", 1,1,1 ,1.0); } else if(message == "Yukiho Hagiwara") { llSetPos(vPOS- 0,0,fSCLZ/2 + 0,0,0.77 ); llSetScale( 0.5, 0.5, 1.54 ); llSetText(llUnescapeURL("%E8%90%A9%E5%8E%9F%E3%80%80%E9%9B%AA%E6%AD%A9") +"\nHeight 154cm", 1,1,1 ,1.0); } else if(message == "Miki Hosii") { llSetPos(vPOS- 0,0,fSCLZ/2 + 0,0,0.795 ); llSetScale( 0.5, 0.5, 1.59 ); llSetText(llUnescapeURL("%E6%98%9F%E4%BA%95%E3%80%80%E7%BE%8E%E5%B8%8C") +"\nHeight 159cm", 1,1,1 ,1.0); } } } サンプルの使い方 1)適当なオブジェクトを1つ作成し、自分の近くに置いておきます。(底面を地面に接するようにします。) 2)新しいスクリプトの全文を、サンプルと置き換え、保存します。 3)オブジェクトにTouchして、ダイアログボックスから選択し、サイズが変わることを確認して下さい。 Tips サンプルの元ネタは「IDOLM@STER」です。 詳細な説明 プリムのスケール(サイズ)をセットします。 サイズ規制:すべての方向について、最低0.01m、最大10mです。 プリムのスケールは、llGetScaleを使って取得できます。 llSetScaleの代わりにllSetPrimitiveParamsを使用することもできます。 History 来客数: - 選択肢 投票 役に立った (0) 役立たずだった (0) 名前 コメント
https://w.atwiki.jp/naga/pages/12.html
A href="http //news.livedoor.com/webapp/journal/cid__46/vender" target=_blank livedoorファンキー通信 /A や A href="http //www.excite.co.jp/News/bit/" target=_blank Excite Bit コネタ /A などを中心に、地方ネタを集めてみました。「記事」と書かれているのは本Blogで紹介しているものです。 BR HR 北海道 BR 札幌ラーメン(三大ラーメン) BR A href="http //www.shiroikoibito.ishiya.co.jp/" target=_blank 白い恋人(三大土産菓子) /A BR A href="http //www11.ocn.ne.jp/~sapsheep/" target=_blank ジンギスカン /A BR A href="http //www.ganso.tv/soupcurry/" target=_blank スープカレー /A BR A href="http //www.butadon.com/" target=_blank 豚丼(十勝) /A BR A href="http //www.abs-plaza.com/kikuyo/" target=_blank 元祖巴丼(函館) /A BR A href="http //allabout.co.jp/travel/travelhokkaido/closeup/CU20010719A/" target=_blank ウニ(礼文・利尻島) /A BR A href="http //news.livedoor.com/webapp/journal/cid__1329134/detail" target=_blank エゾシカバーガー(阿寒町) /A BR A href="http //news.livedoor.com/webapp/journal/cid__1307729/detail" target=_blank 監獄キューピー(網走) /A BR BR 青森県 BR A href="http //news.livedoor.com/webapp/journal/cid__1293398/detail" target=_blank 田んぼアート(田舎館村) /A BR BR 岩手県 BR A href="http //www.iwate-np.co.jp/men/men-top.htm" target=_blank 盛岡三大麺(冷麺・わんこそば・じゃじゃ麺 /A BR A href="http //www.ganso.tv/morioka/" target=_blank 盛岡四大麺(三大麺+はっと鍋) /A BR A href="http //agan.seesaa.net/article/16417608.html" target=_blank わんこそば(三大そば) /A 記事 BR A href="http //www.moriokareimen.com/" target=_blank 盛岡冷麺どっとこむ /A BR 前沢牛(三大銘牛) BR BR 宮城県 BR A href="http //www.innerbrain.co.jp/gyutantop.htm" target=_blank 仙台牛たん焼マップ /A BR A href="http //www.ganso.tv/fukahire/" target=_blank フカヒレ(気仙沼) /A BR A href="http //www.excite.co.jp/News/bit/00091120557167.html" target=_blank H2ロケット実物大模型(角田市) /A BR BR 秋田県 BR A href="http //www.inaniwa-udon.jp/" target=_blank 稲庭うどん(三大うどん) /A BR 比内地鶏(三大地鶏) BR A href="http //www.yokotekamakura.com/12-yakisoba/F-ATTEN.htm" target=_blank 横手やきそば(三大焼きそば) /A BR A href="http //www.excite.co.jp/News/bit/00091120559458.html" target=_blank 世界一大きな太鼓(北秋田市) /A BR A href="http //www.excite.co.jp/News/bit/00091119958851.html" target=_blank 標高0メートルの山(大潟村) /A BR A href="http //www.excite.co.jp/News/bit/00091119958744.html" target=_blank 美人証明書(湯沢市) /A BR A href="http //www.excite.co.jp/News/bit/00091120559330.html" target=_blank なまはげ館(男鹿半島) /A BR BR 山形県 BR A href="http //www.maruyamafoods.co.jp/html/syoukai.html#curry" target=_blank カレー味噌 /A BR A href="http //www.excite.co.jp/News/bit/00091117509109.html" target=_blank ローカル飲料パインサイダー /A BR BR 福島県 BR 喜多方ラーメン(三大ラーメン) BR A href="http //www.excite.co.jp/News/bit/00091119252748.html" target=_blank ラーメン丼(喜多方) /A BR A href="http //www.excite.co.jp/News/bit/00091119253207.html" target=_blank 登山国道(西白河郡西郷村) /A BR BR 茨城県 BR ツェッペリンカレー(蓮根入り) BR A href="http //www.my-do.com/~airshiptown/kare.html" target=_blank 土浦カレーフェスティバル2005 /A BR BR 栃木県 BR A href="http //www.gyozakai.com/" target=_blank 宇都宮餃子会 /A BR A href="http //www.excite.co.jp/News/bit/00091118906139.html" target=_blank 苺そうめん /A BR BR 群馬県 BR 水沢うどん(三大うどん) BR A href="http //www.sss.ne.jp/otakanko/d070-taberu/yakisoba/h_yakisoba_main.htm" target=_blank 太田市(三大焼きそば) /A BR BR 埼玉県 BR A href="http //www.excite.co.jp/News/bit/00091121263195.html" target=_blank 納豆の移動販売 /A BR A href="http //www.aiseikai.or.jp/" target=_blank 愛生会病院(派手サイト) /A BR BR 千葉県 BR BR 東京都 BR カレー BR A href="http //agan.seesaa.net/article/4804366.html" エチオピア(神田) /A 記事 BR A href="http //agan.seesaa.net/article/15999966.html" 茄子おやじ(下北沢) /A 記事 BR A href="http //agan.seesaa.net/article/15999966.html" ジュンバタン メラ(赤坂) /A 記事 BR A href="http //agan.seesaa.net/article/5728853.html" アイスカレー(西新橋、カレー屋nagafuchi) /A BR A href="http //www.currychef-densetsu.com/" target=_blank ガッツ石松プロデュースカレー店 /A BR A href="http //agan.seesaa.net/article/15999966.html" かにチャーハンの店(渋谷) /A 記事 BR A href="http //agan.seesaa.net/article/15999966.html" ねばり屋(納豆丼専門店、幡ヶ谷) /A 記事 BR A href="http //agan.seesaa.net/article/15109974.html" NINJA AKASAKA(忍者レストラン、赤坂) /A 記事 BR A href="http //www.excite.co.jp/News/bit/00091131428530.html" target=_blank ドラえもん蕎麦(中野、長岡屋) /A BR A href="http //www.excite.co.jp/News/bit/00091124384623.html" target=_blank 東京タワー登り階段認定証 /A BR A href="http //agan.seesaa.net/article/3082866.html" target=_blank 八王子ラーメンマップ /A BR A href="http //www.excite.co.jp/News/bit/00091119958074.html" target=_blank 貸し切りできる路面電車(都電荒川線) /A BR A href="http //www.excite.co.jp/News/bit/00091121158007.html" target=_blank 飯田橋限定の「ペコちゃん焼」 /A BR BR 神奈川県 BR A href="http //www.currymuseum.com/museum/history02.html" target=_blank カレー伝来の地横濱 /A BR A href="http //www.currymuseum.com/" target=_blank 横濱カレーミュージアム /A BR A href="http //www.currymuseum.com/currymap2004/map01.html" target=_blank ハマカレーMAP2004 /A BR A href="http //www.city.yokosuka.kanagawa.jp/curry/index.html" target=_blank カレーの街よこすか /A BR A href="http //www.ganso.tv/gunkan/" target=_blank よこすか海軍カレー /A BR BR 新潟県 BR 長岡大和屋の越の雪(三大銘菓) BR A href="http //news.livedoor.com/webapp/journal/cid__1318432/detail" target=_blank 温泉ソムリエ(妙高市赤倉温泉) /A BR A href="http //www.aburage.com/" target=_blank 大きなあぶらあげ(栃尾) /A BR BR 富山県 BR A href="http //www.ganso.tv/gyouza/index.php" target=_blank ます寿し /A BR A href="http //www.excite.co.jp/News/bit/00091121159567.html" target=_blank 観光客がバスで乗りつける薬局(富山市) /A BR BR 石川県 BR A href="http //www.morihachi.co.jp/" target=_blank 金沢森八の長生殿(三大銘菓) /A BR A href="http //www.excite.co.jp/News/bit/00091124432518.html" target=_blank 食べる金箔(金沢) /A BR BR 福井県 BR A href="http //www.bangohan.info/" target=_blank 直火焼カレー(あけぼの精肉店) /A BR BR 山梨県 BR A href="http //agan.seesaa.net/article/5906698.html" target=_blank ほうとう、冷やしほうとう /A 記事 BR BR 長野県 BR 戸隠そば(三大そば) BR A href="http //www.chugoku-np.co.jp/okonomi/index.html" target=_blank 信州そば漫遊 /A BR A href="http //www.excite.co.jp/News/bit/00091121275178.html" target=_blank ガンダム石碑(上高井郡小布施町) /A BR A href="http //www.excite.co.jp/News/bit/00091122979500.html" target=_blank 黒部ダムの大迫力記念写真システム /A BR BR 岐阜県 BR A href="http //okuminocurry.com/" target=_blank 奥美濃カレープロジェクト(郡上市) /A BR BR 静岡県 BR A href="http //agan.seesaa.net/article/5702931.html" ウナギ骨粉入りレトルトカレー(浜名郡新居町) /A BR A href="http //www.sss.ne.jp/otakanko/d070-taberu/yakisoba/h_yakisoba_main.htm" target=_blank 富士宮やきそば(三大焼きそば) /A BR BR 愛知県 BR 名古屋コーチン(三大地鶏) BR A href="http //agan.seesaa.net/article/14127896.html" 台湾ラーメン(味仙) /A 記事 BR あんかけスパゲティ BR A href="http //agan.seesaa.net/article/14127896.html" ヨコイ /A 記事 BR A href="http //agan.seesaa.net/article/14127896.html" あんかけ屋 /A 記事 BR A href="http //www.excite.co.jp/News/bit/00091125465580.html" target=_blank つけてみそかけてみそ /A BR A href="http //news.livedoor.com/webapp/journal/cid__1209469/detail" target=_blank あげマン棒(納屋橋饅頭万松庵、大須万松寺通り店) /A BR BR 三重県 BR A href="http //www.akafuku.com/index.htm" target=_blank 赤福(伊勢市、三大土産菓子) /A BR 松坂牛(三大銘牛) BR A href="http //news.livedoor.com/webapp/journal/cid__1190173/detail" target=_blank 納豆コーヒーゼリーサンド(鈴鹿市京都鞍馬サンド) /A BR A href="http //www.excite.co.jp/News/bit/00091120558832.html" target=_blank 141足お化けダコ(鳥羽水族館) /A BR BR 滋賀県 BR BR 京都府 BR BR 大阪府 BR A href="http //agan.seesaa.net/article/23952994.html" 串かつ /A 記事 BR A href="http //agan.seesaa.net/article/23952994.html" Belgian Beer CAFE(ベルギービール) /A 記事 BR A href="http //agan.seesaa.net/article/23952994.html" せんば自由軒(カレー) /A 記事 BR A href="http //agan.seesaa.net/article/5890331.html" target=_blank 機内食が食べれるレストラン(関西国際空港) /A BR A href="http //www.excite.co.jp/News/bit/00091116915263.html" target=_blank たこ焼きようかん、餃子ようかん /A BR A href="http //www.nissin-noodles.com/" target=_blank インスタントラーメン発明記念館 /A BR A href="http //www.excite.co.jp/News/bit/00091125394326.html" target=_blank 超スピード結婚式(心斎橋) /A BR A href="http //www.excite.co.jp/News/bit/00091125039599.html" target=_blank 地形図に記されている日本一低い山(港区) /A BR A href="http //www.excite.co.jp/News/bit/00091118903919.html" target=_blank ラップ型脂とり紙アブラップ(なんばグランド花月) /A BR A href="http //www.excite.co.jp/News/bit/00091119492307.html" target=_blank セレブ仕様サンマルクカフェ(北摂ロマンチック街道) /A BR A href="http //www.excite.co.jp/News/bit/00091119462691.html" target=_blank アフロヘアー専門美容室(某商店街) /A BR BR 兵庫県 BR 三田牛(三大銘牛) BR A href="http //agan.seesaa.net/article/23476728.html" target=_blank 明石焼き /A Blog記事 BR A href="http //agan.seesaa.net/article/23476728.html" target=_blank 南京町 /A Blog記事 BR A href="http //www.ganso.tv/gyouza/index.php" target=_blank ショコラ /A BR A href="http //agan.seesaa.net/article/23476728.html" target=_blank 心(スープカレー、三宮) /A 記事 BR A href="http //agan.seesaa.net/article/23476728.html" target=_blank SHANKAR(インドカレー、三宮) /A 記事 BR A href="http //www.excite.co.jp/News/bit/00091120202732.html" target=_blank 七三分け専門理容室(加古郡播磨町) /A BR BR 奈良県 BR BR 和歌山県 BR BR 鳥取県 BR ルーカレー消費量日本一(鳥取市) BR A href="http //www.jcci.or.jp/machi/h050701tottori.htm" target=_blank 鳥取カレー倶楽部 /A BR BR 島根県 BR 出雲そば(三大そば) BR A href="http //www.furyudo.jp/" target=_blank 松江風流堂の山川(三大銘菓) /A BR BR 岡山県 BR A href="http //news.livedoor.com/webapp/journal/cid__1330520/detail" target=_blank 犬専用ビーチ(玉野市出崎海水浴場) /A BR BR 広島県 BR A href="http //www.chugoku-np.co.jp/okonomi/index.html" target=_blank お好み焼き /A BR BR 山口県 BR A href="http //www.kawarasoba.jp/" target=_blank 元祖瓦そば(下関市、たかせ) /A BR BR 徳島県 BR BR 香川県 BR A href="http //www.shikoku-np.co.jp/udon/" target=_blank 讃岐うどん(三大うどん) /A BR A href="http //www.excite.co.jp/News/bit/00091118802901.html" target=_blank うどんアイス(属歌郡道の駅滝宮) /A BR A href="http //www.excite.co.jp/News/bit/00091124462540.html" target=_blank 不思議の海のお魚アイス /A BR A href="http //www.excite.co.jp/News/bit/00091120559104.html" target=_blank 幻の郷土料理「さわさわ」(仁尾町) /A BR BR 愛媛県 BR A href="http //agan.seesaa.net/article/7618394.html" target=_blank じゃこ天 /A 記事 BR A href="http //agan.seesaa.net/article/7618394.html" target=_blank 五色そうめん /A 記事 BR A href="http //agan.seesaa.net/article/7618394.html" target=_blank 鯛めし /A 記事 BR A href="http //agan.seesaa.net/article/7618394.html" target=_blank さつま汁 /A 記事 BR A href="http //agan.seesaa.net/article/7618394.html" target=_blank タルト /A 記事 BR A href="http //agan.seesaa.net/article/7618394.html" target=_blank 道後ビール /A 記事 BR A href="http //www.skr.mlit.go.jp/oozu/nanyonavi/jakoten/" target=_blank じゃこ天マップ(南予) /A BR BR 高知県 BR BR 福岡県 BR 博多ラーメン(三大ラーメン) BR A href="http //agan.seesaa.net/article/16215692.html" target=_blank 一蘭 /A 記事 BR A href="http //agan.seesaa.net/article/16215692.html" target=_blank 三九(中洲川端) /A 記事 BR A href="http //agan.seesaa.net/article/16215692.html" target=_blank 明太子 /A 記事 BR A href="http //agan.seesaa.net/article/16215692.html" target=_blank 博多通りもん(お土産) /A 記事 BR A href="http //agan.seesaa.net/article/16215692.html" target=_blank 伽哩本舗(焼きカレー、中洲川端) /A 記事 BR A href="http //www.nikkan-kyusyu.com/view/tl_1116331049.htm" target=_blank 焼きカレー(北九州市門司) /A BR A href="http //agan.seesaa.net/article/16215692.html" target=_blank 吉塚うなぎ屋本店(中洲川端) /A 記事 BR A href="http //agan.seesaa.net/article/16215692.html" target=_blank かろのうろん(うどん、中洲川端) /A 記事 BR A href="http //agan.seesaa.net/article/16215692.html" target=_blank 四川飯店(担々麺、天神大丸) /A 記事 BR A href="http //agan.seesaa.net/article/16215692.html" target=_blank 川下り(柳川) /A Blog記事 BR A href="http //agan.seesaa.net/article/16215692.html" target=_blank 柳川鍋 /A 記事 BR せいろ蒸し(柳川) BR A href="http //www.tomomasu.co.jp/kodomo/index.htm" target=_blank こどもびいる発祥の地 /A BR BR 佐賀県 BR BR 長崎県 BR A href="http //cyanpon.hp.infoseek.co.jp/chanpon.htm" target=_blank 長崎ちゃんぽん /A BR A href="http //agan.seesaa.net/article/15999966.html" リンガーハット(チェーン店) /A 記事 BR A href="http //www.castella.co.jp/home.html" target=_blank 長崎カステラ(三大土産菓子) /A BR A href="http //agan.seesaa.net/article/4320554.html" target=_blank 長崎カステラアイス /A 記事 BR A href="http //www.nanet.co.jp/turkey/" target=_blank トルコライス /A BR BR 熊本県 BR A href="http //www.ganso.tv/taipien/" target=_blank 太平燕(タイピーエン) /A BR BR 大分県 BR A href="http //www3.coara.or.jp/~toriten/" target=_blank とり天 /A BR BR 宮崎県 BR A href="http //r.gnavi.co.jp/f022800/" target=_blank チキン南蛮 /A BR BR 鹿児島県 薩摩シャモ(三大地鶏) BR A href="http //373news.com/03kikaku/ajimise/" target=_blank 鹿児島たのし味めぐり /A BR BR 沖縄県 BR BR